我正在开发一个使用旧版垃圾收集器的C#Mono项目(在Unity3D中)。内存泄漏对我来说是一个令人不快的警钟。
正因为如此,我尽可能地进行优化:避免像瘟疫一样的Linq,回收收藏等等。
我想知道的是 - 是否有一个工具可以让我知道我实例化新对象的所有地方?
我已经能够查找new List
这样的内容了,但是如果我想将搜索范围扩展到new
,我也会得到值类型,我想忽略它。
我正在使用MonoDevelop,Visual Studio 2013和Resharper。
答案 0 :(得分:3)
JetBrains为ReSharper发布了一个相对较新的小插件,静态分析您的分配和装箱代码 - ReSharper Heap Allocations Viewer。它可能正是您正在寻找的。我们遇到了垃圾收集,内存使用和性能问题,这些问题与性能关键领域的LINQ过度分配和过度使用有关。正如您所发现的那样,很难跟踪这些额外的分配。当我们一直在重构以减少分配时,这个插件确实很有帮助,我们一直保持这个插件以防止在新代码中使用过多的内存。
基本上,它会在检测到本地对象分配的地方添加下划线和解释,例如:
它还标记LINQ语句,迭代器和委托的分配以及委托引起的分配。
您可以从ReSharper Extension Manager安装它 - 只需搜索“堆分配查看器”。
答案 1 :(得分:0)