在代码中查找装箱的工具
Posted
技术标签:
【中文标题】在代码中查找装箱的工具【英文标题】:Tools to find boxing in code 【发布时间】:2011-06-20 20:11:26 【问题描述】:背景:我正在为 xbox 进行开发,目前处于优化阶段。我需要减少对象分配。一个起点是找出(取消)装箱发生的位置。
我对 IL 很陌生(因为我从来没有看过任何东西!)并且希望避免通过反汇编程序运行 DLL,寻找 (un)box 命令然后尝试找出哪一行代码它涉及到。
问题:是否有任何工具可以为我报告此类事情(发生(取消)装箱)?
编辑:在下面提出请求到它自己的question,因为它与这个完全不同。
将 GC 堆转储与发生对象创建的代码行联系起来的方式有很多很多的奖励积分!!
【问题讨论】:
“将 GC 堆转储与发生对象创建的代码行联系起来的方式有很多很多的奖励积分!!”然后设置赏金,否则没有奖励积分。 @Jason,我会,但还不能,因为我认为这个问题需要一天左右的时间。 出于好奇,是什么让您相信对象分配是您的主要瓶颈? CLR 中的内存分配通常非常便宜,并且针对小型临时对象的频繁分配进行了优化。 @Dan,众所周知,为 xbox GC 开发代码时会影响性能(紧凑框架 GC 不如桌面)。由于 GC 每 1MB 发生一次(在 xbox 上),因此我们的想法是在游戏过程中尽量减少对象分配。 @MGZeroint i=1;object o = (object)i; /* boxing */ i = (int)o; //unboxing
【参考方案1】:
此MSDN Magazine article 详细说明了如何创建 FxCop(代码分析)规则,该规则可检测装箱和拆箱并将违规行为作为警告显示。这篇文章有点老了,但您应该能够根据自己的需要对其进行调整。
【讨论】:
【参考方案2】:有一个名为BoxCop 的工具可以做到这一点。
在尝试将装箱/拆箱检查集成到构建过程中时,它并不是很有用。为此,您需要为 FxCop 制定一些规则。
【讨论】:
以上是关于在代码中查找装箱的工具的主要内容,如果未能解决你的问题,请参考以下文章