我不想就微优化发起一场激烈的 war ,但我对某些事情感到好奇。
创建没有内部数据的类型的实例在内存和性能方面的开销是多少?
例如,一个实现了IComparer<T>
的简单类可能只包含一个 Compare
方法,没有属性或字段。
class FooComprarer : IComparer<Foo>
{
public int Compare (Foo x, Foo y)
{
// blah, blah
}
}
我见过的典型示例代码只是调用 new FooComparer()
,只要需要其中之一。
我无法想象这里的实例化成本是多少,但我很想知道它到底是什么。以及它与维护比较器类型字典的静态工厂类相比如何,以便一个比较器实例可以在需要的任何地方使用。
最佳答案
有一些开销,但与您要使用比较器的目的相比,它可能可以忽略不计。
在 32 位和 64 位系统上,该实例将使用 16 字节的堆空间。开销是两个指针,在32位系统上使用8个字节,在64位系统上使用16个字节。但是,32位系统中的内存管理器不能分配小于16字节的 block ,所以 block 中会有8个未使用的字节。
如果您经常重复使用这些比较器,您可能会考虑保留它们。但是,您还应该考虑到,与长生命周期对象相比,短生命周期对象对内存管理造成的压力要小得多,因此您必须大量重用比较器,让它们保持存活是值得的。
关于c# - 无数据类型的开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6500127/