powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прав ли я?
4 сообщений из 4, страница 1 из 1
Прав ли я?
    #32372346
Paul Chabinsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В процессе написания приложения на c#(framework 1.1) с использованием WinForms столкнулся с проблеммой:
После закрытия подчиненных форм память не освобождается. Освобождение происходит это лишь в том случае если свернуть приложение в TaskBar. В результате получается что программа начинает занить от 5-150мб в памяти если ее не сворачивать, а открывать и закрывать подчиненные формы(которых у меня много).
Почитав форумы я нашел совет насчет ограничения памяти выделяемой под приложение путем использования функции WinAPI:
Код: plaintext
1.
2.
[DllImport(  "kernel32.dll"  )]
public static extern bool SetProcessWorkingSetSize( IntPtr handle, int minimumWorkingSetSize, int maximumWorkingSetSize );

Делая в коде примерно следующее:
Код: plaintext
1.
2.
3.
4.
5.
static void Main() 
{
	SetProcessWorkingSetSize( System.Diagnostics.Process.GetCurrentProcess().Handle, - 1 , - 1  );
	Application.Run(new Form1());
}

Эти меры не возымели никакого эффекта...
Тогда я везде после закрытия подчиненных форм и окончания работы с ними стал вызывать пренадлежащий каждой из них метод Dispose():
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class ClientDialog : System.Windows.Forms.Form
{
...
	protected override void Dispose( bool disposing )
	{
		if( disposing )
		{
			if(components != null)
			{
				components.Dispose();
			}
		}
		base.Dispose( disposing );
	}
...
}

В родительской форме я делаю примерно так:
Код: plaintext
1.
2.
3.
ClientDialog cd = new ClientForm();
cd.ShowDialog(this);
cd.Dispose();

После данных перетрубаций объем памяти занимаемой приложением перестал перманентно возврастать...
ВОПРОС:"Прав ли я" в своих действиях?
...
Рейтинг: 0 / 0
Прав ли я?
    #32372389
Sergey Pikhulya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> ... Эти меры не возымели никакого эффекта...

Естественно, толку от такого вызова SetProcessWorkingSetSize мало - он ведь выполняется даже до того, как у потока появилась очередь сообщений. Этот вызов нужно делать в тот момент, когда нужно "сборосить" страницы, а не просто один раз вызвать и все.
...
Рейтинг: 0 / 0
Прав ли я?
    #32372402
Paul Chabinsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и подозревал спасибо :)
...
Рейтинг: 0 / 0
Прав ли я?
    #32373183
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Paul Chabinsky

Про Garbage Collector aka GC почитайте. В частности о том по какому случаю он начинает выполняться
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прав ли я?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]