3

有人对使用 .NET Framework 2.0/3.0/3.5 的开销有任何具体信息吗?

我最感兴趣的是每个实例的开销以及是否存在“固定成本”而不管实例的数量是多少,例如在运行 .NET Framework 应用程序的 300 个实例的终端服务环境中,是否只有 1 个 Just-即时编译器?

如果我得到一个近似算法那就太好了,例如每个实例 10mb + JIT 50mb

4

1 回答 1

2

它的工作方式与非托管代码完全相同。CLR、JIT 编译器和 .NET 框架程序集是由运行托管代码的任何进程共享的 DLL。只有一份代码副本加载到 RAM 中,所有进程都将其虚拟内存页面映射到该副本。

托管代码往往比非托管代码拥有更多的私有字节,非托管代码是无法共享的。这首先要归功于 JIT 编译器,它会在一个进程与另一个进程不同的地址处即时生成机器代码。加载程序和垃圾收集堆往往有点强大。

您可以使用 Ngen.exe 消除 JIT 编译器开销。这就是共享 .NET 框架程序集的原因,当您在机器上安装框架时,它们是 Ngen-ed。你不能对堆做任何事情,但这在非托管代码中并没有什么不同。

于 2010-03-05T01:53:12.943 回答