【问题标题】:.NET Framework - Per Application Overhead.NET Framework - 每个应用程序开销
【发布时间】:2010-03-05 00:30:45
【问题描述】:
有人知道使用 .NET Framework 2.0/3.0/3.5 的开销吗?
我最感兴趣的是每个实例的开销以及是否存在“固定成本”,无论实例数量如何,例如在运行 300 个 .NET Framework 应用程序实例的终端服务环境中,是否只有 1 个即时编译器实例?
如果我能得到一个近似算法那就太好了,例如每个实例 10mb + JIT 50mb
【问题讨论】:
标签:
.net
c++-cli
terminal-services
【解决方案1】:
它的工作方式与非托管代码完全相同。 CLR、JIT 编译器和 .NET 框架程序集是由运行托管代码的任何进程共享的 DLL。他们的代码只有一份副本加载到 RAM 中,所有进程都将其虚拟内存页面映射到该副本。
托管代码往往比非托管代码拥有更多的私有字节,非托管代码是无法共享的。这首先要归功于 JIT 编译器,它会在一个进程与另一个进程不同的地址处即时生成机器代码。加载程序和垃圾收集堆往往有点强大。
您可以使用 Ngen.exe 消除 JIT 编译器开销。这就是共享 .NET 框架程序集的原因,当您在机器上安装框架时,它们是 Ngen-ed。你不能对堆做任何事情,但这在非托管代码中并没有什么不同。