Перейти к содержимому

Фото
- - - - -

[C#] Утечка памяти


  • Закрытая тема Тема закрыта
5 ответов в этой теме

#1 Din-nk

Din-nk
  • Новобранец
  • 7 сообщений

Отправлено 28 декабря 2008 - 13:17

Когда я меняю прозрачность(свойство opacity) формы в цикле (к примеру заставляю ее мигать) происходит утечка памяти около 10-20 кб\сек... постепенно она замедляется, но все равно продолжается, в чем может быть дело?

Вот код "мигания":
public void Foo ()
{
bool increase = false;
while(true)
{
Thread.Sleep(40);
if(increase) {this.Opacity+=0.05;}
else {this.Opacity-=0.05;}

if(this.Opacity==1) {increase = false;}
if(this.Opacity<0.1) {increase = true;}

}

}

Сообщение изменено: Din-nk (28 декабря 2008 - 13:17 )

  • 0

#2 Warvick

Warvick
  • Пользователь
  • 411 сообщений
  • Откуда:Tallinn

Отправлено 28 декабря 2008 - 13:33

это не совсем утечка памяти.
связано скороей всего с особенностями отрисовки контролов.
память будет расти, пока GC не решит её почистить.
Можешь сам - GC.Collect();
  • 0
Да, я такой!

#3 Din-nk

Din-nk
  • Новобранец
  • 7 сообщений

Отправлено 28 декабря 2008 - 13:52

Warvick,
я добавил очистку памяти по отдельной кнопке, при ее нажатие в диспетчере задач память, занимаемая программой не уменьшается, но перестает увеличиваться, через некоторое время она снова начинает расти, это нормально?
  • 0

#4 Warvick

Warvick
  • Пользователь
  • 411 сообщений
  • Откуда:Tallinn

Отправлено 28 декабря 2008 - 15:00

пару советов:
- почитай про garbage collection. в принципе ситуация возможна.
- просмотри ешё раз все классы которые ты используешь. если они реализуют интерфейс IDisposable. то надо их уничтожасть после использования
- если работаешь с потоками, посмотри примеры использования ThreadPool.
  • 0
Да, я такой!

#5 Guest_Клошар_*

Guest_Клошар_*
  • Гость

Отправлено 30 декабря 2008 - 13:22

Так и должно проиshодить, это не утечка памятi. CLR будет очишать память только когда определенный % от системной памяти занят. Например если у тебя 4GB RAM и половина свободная GC будет намного реже избавлятся от старых об'eктов, чем если у тебя 1GB. Это улучаеt performance. Плюс на сколько я знаю чтобы ты там в коде не писал ты не можешь заставить GC удалить мусор сразу.

Сообщение изменено: Клошар (30 декабря 2008 - 13:24 )


#6 Din-nk

Din-nk
  • Новобранец
  • 7 сообщений

Отправлено 31 декабря 2008 - 22:28

Клошар, Warvick, Спасибо!
  • 0