Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как очистить память??? Добавлено: 22.05.04 11:38  

Автор вопроса:  sania-tngf

У меня в программе создаеться несколько экземпляров класса, все их я сохраняю в ArrayList! В оперативке это занимает ну пусть 50 метров, после того как я каждому экземпляру класса присваиваю Nothing и делаю MyArrayList.Clear  ничего не происходит и по прежнему прога жрет 50 метров. Как очистить память. И еще тоже самое для обычных массивов. Присваивание массиву значения Nothing ничего не дает?? Почему?

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 22.05.04 11:58
Можно попробовать Erase все массивы... Или использовать/создавать массивы в памяти с помощью GlobalAlloc... и подобных ей API функций

Ответить

Номер ответа: 2
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #2 Добавлено: 24.05.04 13:05

Не дает, потому что это винда выделила твоему процессу столько памяти и отдаст его когда ей этого захочется:-) Правда ее об этом можно попросить:

Private Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal hProcess As IntPtr, ByVal dwMinimumWorkingSetSize As Int32, ByVal dwMaximumWorkingSetSize As Int32) As Int32

SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess.Handle(), -1, -1)

Ответить

Номер ответа: 3
Автор ответа:
 Maxik



Вопросов: 58
Ответов: 201
 Профиль | | #3 Добавлено: 24.05.04 15:26
SetProcessWorkingSetSize
Кажется, это можно сделать и средствами Нет. System.environment.

Ответить

Номер ответа: 4
Автор ответа:
 Maxik



Вопросов: 58
Ответов: 201
 Профиль | | #4 Добавлено: 24.05.04 15:34
Если создать массив в unmanaged, то в managed можно получить только
первый элемент этого массива т. к. невозможно определить его размер.

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #5
Добавлено: 24.05.04 17:29
Нужн опросто вызвать мусорщика (GC.Collect), предварительно прибив все
ссылки на твой большой объект (присовив переменным Nothing). Тогда аппетиты
поумерятся.

Ответить

Номер ответа: 6
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #6 Добавлено: 25.05.04 09:20

Collect-то мусор соберет, только винда вовсе не впешит возвращать зарезервированную под процесс память. Поэтому SetProcessWorkingSetSize рулит.

 

З.Ы. System.Environment.WorkingSet - вернет размер зарезервированной памяти, но не устновит.

Ответить

Номер ответа: 7
Автор ответа:
 Maxik



Вопросов: 58
Ответов: 201
 Профиль | | #7 Добавлено: 25.05.04 12:31
Process.MaxWorkingSet
Process.MinWorkingSet

Ответить

Номер ответа: 8
Автор ответа:
 Alex3



ICQ: 9481061 

Вопросов: 18
Ответов: 132
 Профиль | | #8 Добавлено: 26.05.04 10:59
Опа, не знал. Но это, конечно, хорошо, только SetProcessWorkingSetSize с параметрами -1 и -1 отберет у процесса лишнюю память, а как так сделать в .Net?

Ответить

Номер ответа: 9
Автор ответа:
 Maxik



Вопросов: 58
Ответов: 201
 Профиль | | #9 Добавлено: 26.05.04 16:49
Так же попробуй.

Ответить

Номер ответа: 10
Автор ответа:
 nap



ICQ: 121772779 

Вопросов: 0
Ответов: 42
 Профиль | | #10 Добавлено: 09.06.04 12:14
GC.Collect(GC.MaxGeneration);

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам