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