C# 具有大量函数的无状态对象对内存有什么影响?
假设我有一个名为C# 具有大量函数的无状态对象对内存有什么影响?,c#,.net,memory,garbage-collection,C#,.net,Memory,Garbage Collection,假设我有一个名为Foo的类。该类没有自己的状态,但有大量函数 class Foo { public void One() { // 500 lines of code var bigObject = new BigBigBigObject(); // do something to the big object // launch long-running operation // do some COM interop } pub
Foo
的类。该类没有自己的状态,但有大量函数
class Foo
{
public void One()
{
// 500 lines of code
var bigObject = new BigBigBigObject();
// do something to the big object
// launch long-running operation
// do some COM interop
}
public Result Two()
{
// 2800 lines
using(var disposable = new SomeCustomDisposable())
{
...
}
}
public async Task<Bar> FourteenHundredAndFifty()
{
...
}
}
我的问题是:尽管对Foo
的引用在程序的整个生命周期中保持活动状态,但由于Foo
本身没有状态,它对应用程序的内存占用有什么影响
我假设,由于它没有状态,它的大小在GC堆上仍然是12字节(在32位机器上,在64位机器上是24字节)
然而:
Foo
的大小仍然很小,并且在整个程序中对Foo
的引用保持活动状态这一事实对GC堆没有影响我的假设正确吗?如果您担心的话,您的类不会因为添加方法而在内存中变大。只有字段和属性会增加类的内存大小。内存中的类实例包含指向包含方法指针和类元数据的更大公共结构的指针
假设x86和x64的最小类大小分别为12和24字节是正确的 带上内存分析器看看,不要猜。谢谢。我知道.NET对象的结构。感谢您的确认和有用的链接。:-)
public class Program
{
public static void Main(string[] args)
{
var foo = new Foo();
// run the program for a long time
// calling functions on Foo
....
}
}