达到内存限制会降低.Net应用程序的速度

der*_*rdo 4 .net c# performance memory-management

我们有一个64位C#/.Net3.0应用程序,运行在64位Windows服务器上.应用程序可能会不时使用大量可用内存.在某些情况下,应用程序停止分配额外的内存并显着减慢速度(慢500倍).当我从任务管理器检查内存时,使用的内存量几乎没有变化.应用程序继续运行非常缓慢,并且永远不会出现内存不足异常.有任何想法吗?如果需要更多数据,请与我们联系.

Ode*_*ded 5

当您达到物理内存限制时,操作系统将开始分页(即将内存写入磁盘).这确实会导致你所看到的那种放缓.

解决方案?

  • 添加更多内存 - 这只会在您达到新的内存限制之前有所帮助
  • 重写您的应用程序以减少内存使用
  • 弄清楚你是否有内存泄漏并修复它

如果内存不是问题,也许你的应用程序非常难以点击CPU?你看到CPU接近100%?如果是这样,请检查一遍又一遍地迭代的大型集合.


Aar*_*ght 5

您可以尝试为垃圾收集器启用服务器模式.默认情况下,所有.NET应用程序都在工作站模式下运行,GC会在保持应用程序运行的同时尝试进行扫描.如果打开服务器模式,它会暂时停止应用程序,以便它可以更快地释放内存,并且它还为每个处理器/核心使用不同的堆.

大多数服务器应用程序将使用GC服务器模式看到性能提升,特别是如果它们分配了大量内存.缺点是,当应用程序开始耗尽内存时,您的应用程序将基本停止(直到GC完成).

*要启用此模式,请将以下内容插入您的app.configweb.config:

<configuration>
   <runtime>
      <gcServer enabled="true"/>
   </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)