繁体   English   中英

.NET内存消耗问题

[英].NET Memory Consumption Question

这两种方法中的任何一种是否使用的内存都比其他方法要大,或者会给GC带来更大的负担?

选项1

LargeObject GetObject()
{
    return new LargeObject();
}

选项#2

LargeObject GetObject()
{
    LargeObject result = new LargeObject();
    return result;
}

两种方法的堆内存使用情况相等。 在第二种情况下,创建局部变量的开销很小,但是它不会打扰您。 变量将存储在堆栈中,不会对GC造成任何额外压力。 同样,此附加变量可能由编译器或JIT优化(因此它可能不存在于CLR实际执行的代码中)。

编译器将生成与您的代码版本2等效的IL,需要一个虚拟堆栈位置来存储对象引用。 JIT优化器将生成与您的代码版本1等效的机器代码,引用存储在CPU寄存器中。

换句话说,没关系。 您在运行时会获得完全相同的机器代码。

您可以查看生成的IL(使用反射器),看看它是否完全不同。 根据编译优化设置,#2可能会在堆栈上存储一个额外的值(作为result值),但这只会额外增加4或8个字节(如果它是一个类,应该是!),并且会完全不影响GC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM