And*_*per 9 .net c# class overhead
我不想在微优化上开始一场火焰战争,但我对某些东西感到好奇.
在创建没有内部数据的类型的实例的内存和性能方面有什么开销?
例如,实现的简单类IComparer<T>可能只包含一个Compare方法,而不包含任何属性或字段.
class FooComprarer : IComparer<Foo>
{
public int Compare (Foo x, Foo y)
{
// blah, blah
}
}
Run Code Online (Sandbox Code Playgroud)
我见过的典型示例代码只是调用new FooComparer(),只要需要其中一个.
我无法想象这里的实例化成本是非常多的,但我很想知道它实际上是什么.那么它将如何比较一个静态工厂类来维护比较器的类型字典,以便可以在任何需要的地方使用一个比较器实例.
Guf*_*ffa 13
有一些开销,但与你要使用比较器相比,它可能是微不足道的.
在32位和64位系统上,该实例将使用16个字节的堆空间.开销是两个指针,在32位系统上使用8个字节,在64位系统上使用16个字节.但是,32位系统中的内存管理器不能分配小于16字节的块,因此块中将有8个未使用的字节.
如果你重复使用那些比较器,你可能会考虑保留它们.但是,您还应该考虑短寿命对象对内存管理的压力远远小于长寿命对象,因此您必须重复使用比较器才能使它们保持活动状态.
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |