Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > .NET FAQ > Рациональное использование памяти


Автор: StavR 26.05.05, 20:51
Здраствуйте... Пишу на C# недавно, тут случайно заметил что прога моя жрет 40Мб памяти...Причем при открытии закрытии отчетов, размер занимаемой памяти увеличивается... В проге использую Crystal Report'ы и кучу sqlDataAdapter, sqlConnection, DataSet'ов. Столько и должно памяти расходоваться?
Заметил что даже формочка с кнопкой около 8Мб занимает...

Автор: andrey 26.05.05, 21:23
Это нормально. Поищи по форуму - много подобных тем было, почитай MSDN про принципы работы GC в .NET. В общем случае схема такова, пока памяти остаются достатоно, GC не будет собирать мусор, т.е. прога займёт всю доступную память (если сможет). Практически все проги останавливаются на 80-150M. Не парься по этому поводу. Я очень тяжелое .NET приложение запускал на P166 с 32M RAM - и ничего, работала нормально, занимала "всего" 34M.

Автор: GazOn 26.05.05, 23:10
andrey прав, в большинстве случаев не надо париться по этому поводу.

У каждого процесса есть рабочее множество, оно "резервирует" для процесса определенное кол-во памяти, которое может использовать только этот процесс, но это не значит, что вся зарезервированная память этим процессом используется. Если какому то приложению будет не хватать памяти, то ОС ограничит у вашего приложения ту зарезервированную память, которая свободна, поэтому вам беспокоиться не надо. Реально приложение занимает меньше памяти.
Кстати, рабочее множество автоматически сводится к минимуму при сворачивании формы.
Или рабочее множество можно минимизировать при помомощи API ф-ии
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SetProcessWorkingSetSize(hProcee, -1, -1);

Но при этом, когда приложению потребуется больше памяти, и рабочее множество установлено в минимум, то приложению придется его увеличивать, а увеличение рабочего множества – довольно длительная операция, поэтому в большинстве случаев целесообразно оставлять его с запасом.

подробнее можно почитать, например, здесь:
http://www.gotdotnet.ru/Forums/Common/114669.aspx

Добавлено
надо будет добавить это в FAQ.

Автор: StavR 27.05.05, 19:05
Спасибо... разобрался.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)