Приложение .Net c #, использующее слишком много памяти после завершения процесса - PullRequest
0 голосов
/ 06 января 2012

Я создал простое приложение .net, которое берет данные из базы данных и сохраняет их в виде документа Excel. Проблема, которую я заметил, заключается в том, что после завершения процесса и создания электронной таблицы приложение занимает около 750 МБ памяти. Это большой отчет, но я подумал, что когда-то он сохранил, что память освобождена?

Так ли это?

Спасибо

Ответы [ 5 ]

2 голосов
/ 06 января 2012

Память не освобождается мгновенно сборщиком мусора.

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

2 голосов
/ 06 января 2012

Попробуйте использовать профилировщик памяти. Вот некоторые ссылки на товары:

http://www.red -gate.com / продукция / DotNet-разработка / Муравьи-памяти профайлер /

http://www.jetbrains.com/profiler/

2 голосов
/ 06 января 2012

В памяти .Net не обязательно освобождается автоматически.

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

1 голос
/ 06 января 2012

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

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

0 голосов
/ 22 марта 2014

Проверьте определения. Например, если вы определили формы в своем коде, он будет использовать много оперативной памяти из-за многократного запуска одной и той же формы.

Например; У меня есть 3 формы в моем заявлении. Форма 1, Форма 2 и Форма 3.

namespace RAMAPP 
{
    public partial class RAMAPP : Form
    {
       Form1 first = new Form1();
       Form2 second = new Form2();
       Form3 third = new Form3();

    public RAMAPP()
    {
       InitializeComponent();
    }
}
}

Здесь, когда вы нажимаете кнопку «Пуск», программа читает все строки, которые вы написали. И перед запуском, программа RAMAPP определяет формы как первый, второй и третий. Проблема состоит в том, чтобы определить эти формы перед инициализацией. Вы должны удалить все определения формы перед инициализацией. После этого перезапустите вашу программу, и она будет запущена с надеждой:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...