Приложение использует более 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

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

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

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