2014-09-24 32 views
2

我正在開發一個C#Mono項目(在Unity3D中),它使用舊版本的垃圾回收器。內存泄漏對我來說是一個不愉快的警告。查找所有出現的對象實例化

正因爲如此,我的優化,就像我所能的:避免LINQ的瘟疫一樣,回收集合等

我想知道的是 - 是有一個工具,可以讓我知道所有我正在實例化新對象的地方?

我已經能夠grep的東西,如new List這是好的,但如果我想擴大我的搜索new我也得到值類型,我想忽略。

我正在使用MonoDevelop,Visual Studio 2013和Resharper。

+0

resharper會告訴你在哪裏使用構造函數。 – 2014-09-24 18:22:54

+0

我怎樣才能找到這個功能? – Vesuvian 2014-09-24 18:32:10

+0

您是否嘗試過[Heapshot](http://www.mono-project.com/docs/debug+profile/profile/heapshot/)? – dbc 2014-09-24 18:32:24

回答

3

JetBrains爲ReSharper發佈了一個相對較新的小插件,它可以靜態分析您的代碼分配和裝箱 - ReSharper Heap Allocations Viewer。這可能正是你要找的。我們在垃圾回收,內存使用和性能方面遇到了問題,這些問題與性能關鍵領域中過度分配和過度使用LINQ有關。正如你發現的那樣,追蹤這些額外分配可能很困難。當我們進行重構以減少分配時,這個插件確實有所幫助,並且我們保持這種狀態以防止在新代碼中使用過多的內存。

基本上,它添加下劃線和解釋無論它檢測本地對象分配,例如:

enter image description here

這也標誌了LINQ語句,迭代器和代表的分配和分配代表們造成的。

您可以從ReSharper擴展管理器安裝它 - 只需搜索「堆分配查看器」即可。

+0

這看起來不錯。有沒有辦法輸出所有對象分配的實例?例如,以代碼問題瀏覽器的格式。 – Vesuvian 2014-09-24 19:24:00

+0

您應該可以在分配上輸入+並顯示所有類似的代碼問題。 – citizenmatt 2014-09-24 22:13:59

+0

我給了它一個去,它似乎並沒有爲我工作。我不知道輸出所有對象分配實例的方法。也許這會提出很好的功能要求?我們在分析後使用插件,因此我們知道大約在哪裏發生了過多的分配。 – 2014-09-25 08:51:31