C# 查找对象实例化的所有实例

C# 查找对象实例化的所有实例,c#,optimization,resharper,instantiation,C#,Optimization,Resharper,Instantiation,我正在开发一个C#Mono项目(在Unity3D中),它使用的是旧版本的垃圾收集器。记忆泄露对我来说是一个不愉快的警钟 正因为如此,我正在尽可能地优化:避免像瘟疫一样的Linq,回收收集,等等 我想知道的是——有没有一个工具可以让我知道我实例化新对象的所有地方 我可以搜索new List之类的内容,这很好,但是如果我想将搜索扩展到new,我也会得到值类型,我想忽略这些值类型 我使用的是MonoDevelop、Visual Studio 2013和Resharper。JetBrains为Resha

我正在开发一个C#Mono项目(在Unity3D中),它使用的是旧版本的垃圾收集器。记忆泄露对我来说是一个不愉快的警钟

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

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

我可以搜索
new List
之类的内容,这很好,但是如果我想将搜索扩展到
new
,我也会得到值类型,我想忽略这些值类型


我使用的是MonoDevelop、Visual Studio 2013和Resharper。

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

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

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


您可以从ReSharper扩展管理器安装它-只需搜索“堆分配查看器”。

[2021更新]

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

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

  • 转到类定义并查询符号的用法,参见下面的屏幕截图
  • 单击“查找结果”中的“显示”以提高可读性
  • 按新实例创建筛选结果
就这样,现在列出了所有的实例化


Resharper将告诉您构造函数的使用位置。我如何找到此功能?您尝试过吗?将光标放在构造函数上或使用构造函数和Resharper\find\find Usages菜单项;这看起来棒极了。是否有任何方法可以输出对象分配的所有实例?例如,以类似代码问题管理器的格式。您应该能够在分配中按alt+enter键并显示所有类似的代码问题。我尝试了一下,它似乎对我不起作用。我不知道如何输出对象分配的所有实例。也许这会是一个很好的功能要求?我们在评测之后使用了插件,因此我们大致知道了过度分配发生的位置。这有点像大头针,但它教会了我一些非常有趣的事情。例如,我不知道每次调用params[]方法都会实例化一个新数组。