1

我在我的应用程序中看到了相当多的垃圾收集器停顿,所以我对其进行了分析,发现大量垃圾是由我的一种方法生成的,该方法仅执行以下操作:

return Address.Equals(other.Address)

Address一个在哪里IntPtr

事实证明,IntPtr它不像大多数值类型那样实现IEquatable<T>,因此我other.Address每次都在装箱。

是否有充分的理由IntPtr不实现该接口,或者这是一个疏忽?

4

1 回答 1

2

这是一个疏忽。IEquatable<T>存在后在 .NET 2.0 中添加IntPtr。BCL 中有几个地方没有正确升级,似乎没有人有兴趣修复它们。

只需使用==. 无论如何,它是更好的风格,因为它清楚地表明了你的意图。

于 2015-02-13T15:14:05.277 回答