Результаты поиска
Анатомия " утечки памяти"
В перспективе .NET:
- Что такое утечка памяти ?
- Как вы можете определить, утечка ли вашего приложения? Что же это за последствия?
- Как можно предотвратить утечку памяти?
- Если у вашего приложения есть утечка памяти, она исчезает при завершении процесса или убивается? Или утечки памяти в вашем приложении влияют на другие процессы в системе даже после завершения процесса?
- А как насчет неуправляемого кода, доступ к которому осуществляется через COM Interop и / или P/Invoke?
Rational Purify не удается перейти к утечкам памяти
Поэтому моя компания использует восхитительно ошибочную программу Rational Purify (как плагин для Microsoft Visual Developer Studio) для управления утечками памяти. Программа соизволила позволить вам нажать на утечку памяти после того, как вы столкнулись с ней, а затем перейти к строке, на которой происходит утечка.
К сожалению, Purify неисправен, и Purify не будет прыгать в место, где произошла утечка, он только упоминает класс и метод, в котором происходит утечка. К сожалению, иногда это так же полезно, как нанять гида, чтобы помочь вам охотиться на медведей и заставить его указать на лес и сказать вам, что там есть медведи.
У кого-нибудь с опытом Purify есть идеи, как я могу исправить эту проблему или иметь хорошее руководство, чтобы посмотреть?
Может ли использование лямбд в качестве обработчиков событий вызвать утечку памяти?
Скажем, у нас есть следующий метод:
private MyObject foo = new MyObject();
// and later in the class
public void PotentialMemoryLeaker(){
int firedCount = 0;
foo.AnEvent += (o,e) => { firedCount++;Console.Write(firedCount);};
foo.MethodThatFiresAnEvent();
}
Если класс с этим методом создается экземпляр и метод PotentialMemoryLeaker вызывается несколько раз, происходит ли утечка памяти?
Есть ли какой-нибудь способ отцепить этот обработчик событий lambda после того, как мы закончим вызывать MethodThatFiresAnEvent ?
Огромное веб-приложение с утечкой памяти в IE 6
У меня есть огромное веб-приложение, которое имеет проблемы с утечкой памяти в IE 6.
Исправление утечки памяти в примере кода 5 строк, демонстрирующем проблему, легко.
Но если у меня есть очень большое приложение, с чего начать?
Утечек памяти .NET
Назовите все возможные способы, с помощью которых мы можем получить утечку памяти .NET?
Я знаю о двух из них:
- Неправильно не регистрируются обработчики/делегаты событий .
- Отказ от использования динамических дочерних элементов управления в формах Windows:
Пример:
// Causes Leaks
Label label = new Label();
this.Controls.Add(label);
this.Controls.Remove(label);
// Correct Code
Label label = new Label();
this.Controls.Add(label);
this.Controls.Remove(label);
label.Dispose();
Обновление: идея состоит в том, чтобы перечислить общие подводные камни, которые не слишком очевидны (например, выше). Обычно считается, что утечки памяти не являются большой проблемой из-за сборщика мусора. Не так, как это было раньше в C++.
Отличная дискуссия, ребята, но позвольте мне уточнить... по определению, если в .NET не осталось ссылки на объект, он будет в какой-то момент собран как мусор. Так что это не способ вызвать утечку памяти.
В управляемой среде я бы счел это утечкой памяти, если бы у вас была непреднамеренная ссылка на какой-либо объект, о котором вы не знаете (отсюда два примера в моем вопросе).
Итак, каковы различные возможные способы, которыми может произойти такая утечка памяти?
Что является лучшим детектором утечки свободной памяти для программы C/C++ и ее плагина DLLs?
У меня есть .exe и много подключаемых модулей .dll, которые загружает .exe. (У меня есть источник для обоих.) Кросс-платформенное (с исходным кодом) решение было бы идеальным, но платформа может быть сужена до WinXP и Visual Studio (7.1/2003 в моем случае).
Встроенный детектор утечки VS дает только строку, из которой был вызван new/malloc, но у меня есть оболочка для распределения, поэтому лучше всего использовать полный символический стек trace.
Детектор также мог бы обнаружить утечку как в .exe, так и в сопутствующих ему подключаемых модулях .dll.