Hello, "Igor Trofimov"
> За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было). > > Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние? > > Как бы так посмотреть соотношения тип/кол-во для всех объектов, существующих в памяти приложения? Уже после того, как оно поработало пару дней?
Написать стресс тесты и изначально запустить под профайлером?
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, Michael Chelnokov, Вы писали:
iT>>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?
MC>А каким образом в managed-коде можно "наплодить лишних ссылок"?
Hello, "Michael Chelnokov" > > iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние? > А каким образом в managed-коде можно "наплодить лишних ссылок"?
Никаких проблем:
static ArrayList memoryLeakHolder = new ArrayList(); // складывать весь мусор тут
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, Igor Trofimov, Вы писали:
iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).
iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?
По моему мнению,
Впринципе GC так и должен был сработать, так как сам говоришь что памяти дофига еще оставалось. Просто если система потребует памяти а ее не окажется, тогда пинка под зад даст GC-ру и он начнет шевелится. А так он впринципе правильно что спит — нефиг лишний раз систему нагружать, пока оперативка есть можно и поспать. Потом проснеться почистит за пару сек и снова три дня спать.
Эх мне бы так.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, Michael Chelnokov, Вы писали:
MC>>А каким образом в managed-коде можно "наплодить лишних ссылок"?
U>Можно забыть отписать объект от события.
Товарищ, бессмертный, можно по подробнее что это значит. Лучше прямо кусок кода. Всмысле делегат создать, "прибавить" к какому-нить событию и не удалить ?
Здравствуйте, Спасибо, Вы писали:
U>>Можно забыть отписать объект от события.
С>Товарищ, бессмертный, можно по подробнее что это значит. Лучше прямо кусок кода. Всмысле делегат создать, "прибавить" к какому-нить событию и не удалить ?
Конечно, можно.
private void menuItem1_Click(object sender, System.EventArgs e)
{
MyClass my = new MyClass(this.Size.Height.ToString());
this.SizeChanged += new EventHandler(my.SizeChanged);
}
public class MyClass
{
public string Name = "";
public MyClass(string name)
{
this.Name = name;
}
public void SizeChanged(object sender, System.EventArgs e)
{
MessageBox.Show(Name);
}
}
При каждом клике на пункт меню будет создавать еще один экземпляр MyClass и умрут они только вместе с формой.
U> private void menuItem1_Click(object sender, System.EventArgs e)
U> {
U> MyClass my = new MyClass(this.Size.Height.ToString());
U> this.SizeChanged += new EventHandler(my.SizeChanged);
U> }
U> public class MyClass
U> {
U> public string Name = "";
U> public MyClass(string name)
U> {
U> this.Name = name;
U> }
U> public void SizeChanged(object sender, System.EventArgs e)
U> {
U> MessageBox.Show(Name);
U> }
U> }
U>
U>При каждом клике на пункт меню будет создавать еще один экземпляр MyClass и умрут они только вместе с формой.
Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..
Здравствуйте, Спасибо, Вы писали:
С>Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..
Не совсем, когда создается переменная на уровне формы, то понятно, что она очистится только при закрытии формы. В ситуации с событиями все куда менее прозрачно. Например, в приведенном примере была создана локальная переменная, которая вроде должна уничтожиться при выходе из метода, но на самом деле этого не произойдет.
Здравствуйте, Undying, Вы писали:
U>Здравствуйте, Спасибо, Вы писали:
С>>Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..
U>Не совсем, когда создается переменная на уровне формы, то понятно, что она очистится только при закрытии формы. В ситуации с событиями все куда менее прозрачно. Например, в приведенном примере была создана локальная переменная, которая вроде должна уничтожиться при выходе из метода, но на самом деле этого не произойдет.
Но она помещалась в вполне нелокальный список (в плане делегат события)
Впринципе событие очень похоже на ArrayList в который складываются делегаты.
Здравствуйте, Igor Trofimov, Вы писали:
iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).