有没有人有关于使用.NET Framework 2.0 / 3.0 / 3.5的开销的具体信息?
我最感兴趣的是每个实例的开销以及是否存在“固定成本”而不管实例的数量,例如在具有300个.NET Framework应用程序实例的终端服务环境中,只有1个即时编译器实例?
如果我得到一个近似算法会很棒,例如每个实例10mb + JIT的50mb
答案 0 :(得分:2)
它的工作方式与非托管代码完全相同。 CLR,JIT编译器和.NET框架程序集是由运行托管代码的任何进程共享的DLL。只有一个代码副本加载到RAM中,所有进程都将其虚拟内存页映射到该副本。
托管代码往往比非托管代码拥有更多私有字节,这种代码无法共享。这首先是由于JIT编译器,它在地址上即时生成机器代码,对于一个进程与另一个进程不同。装载机和垃圾收集堆往往有点强劲。
使用Ngen.exe消除JIT编译器开销。这就是.NET框架程序集共享的原因,当您在机器上安装框架时,它们是Ngen-ed。你不能对堆做任何事情,但在非托管代码中并没有什么不同。