Используете Sos (dumpheap и т. Д.) Из тестового кода? - PullRequest
0 голосов
/ 03 октября 2010

Недавно я обнаружил утечку памяти в моем приложении, и я хотел бы добавить тестовый пример, чтобы убедиться, что он остается таким.Я хочу сделать следующее:

 int numberOfInstancesBeforeFunction = GetNumberOfInstancesInMemory(typeof(MyClass));

 PerformFunction();

 GC.Collect();

 int numberOfInstancesAfterFunction = GetNumberOfInstancesInMemory(typeof(MyClass));

 Assert.AreEqual(numberOfInstancesBeforeFunction, numberOfInstancesAfterFunction, "mem leak");

Возможно ли это?

Спасибо,

Euan

1 Ответ

0 голосов
/ 03 октября 2010

В принятом ответе от @Adam Robinson здесь есть советы, как этого добиться, используя WeakReference .

GetNumberOfInstancesInMemory должен будет проверить статический контейнер с MyClass объектом WeakReference с, чтобы увидеть, сколько из них вернет thisReference.IsAlive = true; (и удалить все, которые имеют isAlive = false.

ЛюбойКонструкция MyClass добавит ссылку на себя в статический контейнер.

Я думаю, что есть элегантный способ Linq для инкапсуляции необходимой логики.

Я не знаю, есть лилюбой способ сделать это без добавления дополнительного кода в ваш MyClass.

...