2014-09-24 2 views
2

Я разрабатываю проект Mono C# (в Unity3D), который использует более старую версию сборщика мусора. Утечка памяти была неприятным сигналом для меня.Найти все вхождения экземпляра объекта

Из-за этого я оптимизируя столько, сколько я, возможно, могу: избежать Linq, как чумы, коллекция переработки и т.д.

То, что я хотел бы знать, - есть инструмент, который позволит мне знать все из мест, где я создаю новые объекты?

Я смог grep для таких вещей, как new List, что хорошо, но если я хочу расширить свой поиск до new, я также получаю типы значений, которые я хочу игнорировать.

Я использую MonoDevelop, Visual Studio 2013 и Resharper.

+0

Resharper сообщит вам, где используется конструктор. –

+0

Как найти эту функцию? – Vesuvian

+0

Вы пробовали [Heapshot] (http://www.mono-project.com/docs/debug+profile/profile/heapshot/)? – dbc

ответ

3

Существует относительно новый небольшой плагин, который JetBrains выпущен для ReSharper, который статически анализирует ваш код для распределения и бокса - ReSharper Heap Allocations Viewer. Это может быть именно то, что вы ищете. У нас были проблемы с сборкой мусора, использованием памяти и производительностью, связанными с чрезмерным распределением и чрезмерным использованием LINQ в критичных для производительности областях. Трудно отследить эти дополнительные распределения вниз, как вы нашли. Этот плагин действительно помог, когда мы рефакторизуем, чтобы сократить выделение, и мы сохранили его, чтобы предотвратить чрезмерное использование памяти в новом коде.

В основном, это добавляет подчеркивание и объяснение, где он обнаруживает местное размещение объектов, например .:

enter image description here

Он также флаги до ОТЧЕТНОСТИ LINQ, ассигнование итераторов и делегатов, а также распределение вызваны делегатами.

Вы можете установить его из диспетчера расширений ReSharper - просто выполнить поиск «просмотрщик кучи».

+0

Это выглядит отлично. Есть ли способ вывести все экземпляры распределений объектов? Например, в таком формате, как проводник проблем с кодом. – Vesuvian

+0

Вы должны иметь возможность alt + вводить выделение и показывать все аналогичные проблемы с кодом. – citizenmatt

+0

Я сказал, что это не работает для меня. Я не знаю способа вывода всех экземпляров объектов. Возможно, это сделает хороший запрос функции? Мы использовали плагин после профилирования, поэтому мы знали приблизительно, где происходят чрезмерные распределения. –

Смежные вопросы