新的.Net流程的成本

Ale*_*x K 4 .net memory clr performance

我寻求建议,要么证明或消除我团队中的信念(显然没有理由).相信是开始一个新的.Net应用程序进程是昂贵的内存(每个进程20MB及以上).虽然我指出应用程序显然没有使用那么多(如内存分析器中所见),但他们反驳说它不是应用程序,而是.Net Framework的运行时消耗内存.

这是基于他们在某处听到的东西,所以没有确凿的证据存在,但这种信念在团队中根深蒂固.我已经google了一下,但是我找不到对.Net Framework运行时的每个进程成本的任何认真分析.虽然我根本无法接受每个.Net过程都很昂贵(虽然我愿意承认我可能错了),但我不太了解我的观点.另一方面,我的队友不足以证明我是错的.有谁知道有关此事的任何研究/分析?

谢谢.

Han*_*ant 5

嗯,这都是相对的.Windows中的进程通常是一种昂贵的资源,但只有将它与Unix等操作系统进行比较时才会使用.正常的Windows资源共享规则对托管进程有效.物理内存中只有一个副本用于CLR,JIT编译器和任何包含所有.NET框架程序集的程序集中的代码.Windows内存管理器只是在使用这些DLL的所有进程中映射相同的页面.

不共享的是Private Bytes,您可以使用SysInternal的Process Explorer等工具查看此编号..NET进程中较大的私有字节块是

  • 垃圾收集堆
  • 线程使用的堆栈,默认为1 MB一块
  • AppDomain中加载的代码使用的任何静态变量
  • 即时生成的代码,用于未编译的程序集
  • CLR和抖动的私有数据.

显然,只要在多个进程中使用程序集,使用ngen.exe就可以显着减少专用字节数.AppDomain是.NET减少进程成本并仍然达到隔离级别的方法,用于在ASP.NET和SQL Server等自定义CLR主机中发挥巨大作用.如果您可以选择在线程中运行代码而在另一个进程中运行代码,那么线程应始终是首选.