c# – 无数据类型的开销是多少?

c# – 无数据类型的开销是多少?,第1张

概述我不想在微观优化上开始火焰之战,但我对某些事情很好奇. 创建没有内在数据类型的实例的内存和性能方面的开销是多少? 例如,实现IComparer< T>的简单类可能只包含一个比较方法,没有属性或字段. class FooComprarer : IComparer<Foo>{ public int Compare (Foo x, Foo y) { // blah, 我不想在微观优化上开始火焰之战,但我对某些事情很好奇.

创建没有内在数据类型的实例的内存和性能方面的开销是多少?

例如,实现IComparer< T>的简单类可能只包含一个比较方法,没有属性或字段.

class FooComprarer : IComparer<Foo>{    public int Compare (Foo x,Foo y)     {        // blah,blah    }}

我看到的典型示例代码只是调用新的FooComparer(),无论哪一个都需要.

我无法想象这里的实例化成本是非常的,但我有兴趣知道它实际上是什么.而且,如何比较一个静态工厂类,它将类型的字典维护到比较器,以便在需要的地方使用一个比较器的实例.

解决方法 有一些开销,但与您将要使用的比较器相比,它可能是微不足道的.

在32位和64位系统上,该实例将使用16个字节的堆空间.开销是两个指针,在32位系统上使用8个字节,在64位系统上使用16个字节.但是,32位系统中的内存管理器无法分配小于16字节的块,因此块中将有8个未使用的字节.

如果您重复使用这些比较器,您可以考虑保留它们.但是,您还应该考虑短寿命对象对内存管理的影响比长寿命对象少得多,因此您必须重用比较器才能使其保持活力.

总结

以上是内存溢出为你收集整理的c# – 无数据类型的开销是多少?全部内容,希望文章能够帮你解决c# – 无数据类型的开销是多少?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1261972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存