Приложение использует более 1 ГБ ОЗУ при запуске

Я работаю над этим приложением некоторое время, и оно почти закончено, поэтому я решил начать исправлять некоторые вещи, такие как высокое использование памяти.

Я использую Visual Studio 2022 и приложение .NET Framwork 4.8 C# Form. В форме у меня есть несколько элементов управления страницей, каждая с 2-5 вкладками. У меня есть несколько контейнеров с разделенными панелями, и все они имеют кнопки, метки и текстовые поля. У меня есть минимальные переменные, объявленные глобально (всего 6), я попытался объявить все переменные локально. У меня есть 1 дополнительный урок.

При запуске средство диагностики показывает, что приложение использует 1,2 ГБ ОЗУ. В диспетчере задач также показывает, что он использует около 1,2 ГБ ОЗУ. Я уменьшил это до 550G, используя GC.Collect(). Есть ли способ уменьшить использование ОЗУ или это нормально? Если я не дал достаточно информации, дайте мне знать, и я дам все, что могу.

Обновлено: благодаря Хуанхо, Джо Сьюэллу и Хансу Пассанту проблема была решена.

У меня есть сотни одноразовых компонентов. Не сделал все из них, но это позволило бы мне использовать 550 МБ оперативной памяти. У меня была небольшая база данных, но она не подключалась в начале программы. Последней проблемой, из-за которой объем ОЗУ увеличился с 550 МБ до 29 МБ, были несколько изображений в моем списке изображений, которые не использовались. Спасибо вам троим за помощь, от 1,2гб до 29мб.

Добро пожаловать в Stack Overflow. К сожалению, будет сложно диагностировать модели использования памяти на сайте вопросов и ответов. Я не думаю, что формы/элементы управления будут занимать большие объемы памяти, более вероятно, что ваше приложение обрабатывает большой объем данных, поэтому, возможно, некоторые уточнения о том, как ваши данные структурированы, сколько это есть, может дать нам некоторые подсказки.

Joe Sewell 22.04.2022 22:31

Это может быть большой запрос базы данных, могут быть растровые изображения. То, что GC.Collect() оказывает такое большое влияние, настоятельно предполагает отсутствие вызовов Dispose() на растровых изображениях. Используйте профилировщик памяти, встроенный в VS, чтобы нам не приходилось гадать. docs.microsoft.com/en-us/visualstudio/profiling/…

Hans Passant 23.04.2022 00:13
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это может быть что угодно. Без проекта и отладки это сложно понять. Тем не менее, GC.Collect() уменьшение его вдвое, зная, что очень мало случаев, когда нужно звонить GC.Collect(), заставляет меня подозревать, что вы используете IDisposable компоненты, а не звоните Dispose().

Посмотрите на некоторые объекты, которые вы используете, есть ли у них метод Dispose() и используют ли они использование шаблона для C# для удаления этих объектов, когда вы закончите с ними.

Я надеюсь, что это помогает. Опять же без проекта это трудно понять.

Другие вопросы по теме