查找所有出现的对象实例化

时间:2014-09-24 18:04:05

标签: c# optimization resharper instantiation

我正在开发一个使用旧版垃圾收集器的C#Mono项目(在Unity3D中)。内存泄漏对我来说是一个令人不快的警钟。

正因为如此,我尽可能地进行优化:避免像瘟疫一样的Linq,回收收藏等等。

我想知道的是 - 是否有一个工具可以让我知道我实例化新对象的所有地方?

我已经能够查找new List这样的内容了,但是如果我想将搜索范围扩展到new,我也会得到值类型,我想忽略它。

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

2 个答案:

答案 0 :(得分:3)

JetBrains为ReSharper发布了一个相对较新的小插件,静态分析您的分配和装箱代码 - ReSharper Heap Allocations Viewer。它可能正是您正在寻找的。我们遇到了垃圾收集,内存使用和性能问题,这些问题与性能关键领域的LINQ过度分配和过度使用有关。正如您所发现的那样,很难跟踪这些额外的分配。当我们一直在重构以减少分配时,这个插件确实很有帮助,我们一直保持这个插件以防止在新代码中使用过多的内存。

基本上,它会在检测到本地对象分配的地方添加下划线和解释,例如:

enter image description here

它还标记LINQ语句,迭代器和委托的分配以及委托引起的分配。

您可以从ReSharper Extension Manager安装它 - 只需搜索“堆分配查看器”。

答案 1 :(得分:0)

[2021 更新]

看起来 Resharper 堆分配查看器扩展已合并到 Resharper 符号使用通用工具中。

如果您在 2021 年使用 Resharper 并寻找类的实例化,请执行以下步骤:

  • 转到类定义并查​​询符号的使用,参见。下面的截图
  • 点击在查找结果中显示以获得更好的可读性
  • 新实例创建
  • 过滤结果

就是这样,您的所有实例现在都已列出。

enter image description here