der*_*rdo 4 .net c# performance memory-management
我们有一个64位C#/.Net3.0应用程序,运行在64位Windows服务器上.应用程序可能会不时使用大量可用内存.在某些情况下,应用程序停止分配额外的内存并显着减慢速度(慢500倍).当我从任务管理器检查内存时,使用的内存量几乎没有变化.应用程序继续运行非常缓慢,并且永远不会出现内存不足异常.有任何想法吗?如果需要更多数据,请与我们联系.
当您达到物理内存限制时,操作系统将开始分页(即将内存写入磁盘).这确实会导致你所看到的那种放缓.
解决方案?
如果内存不是问题,也许你的应用程序非常难以点击CPU?你看到CPU接近100%?如果是这样,请检查一遍又一遍地迭代的大型集合.
您可以尝试为垃圾收集器启用服务器模式.默认情况下,所有.NET应用程序都在工作站模式下运行,GC会在保持应用程序运行的同时尝试进行扫描.如果打开服务器模式,它会暂时停止应用程序,以便它可以更快地释放内存,并且它还为每个处理器/核心使用不同的堆.
大多数服务器应用程序将使用GC服务器模式看到性能提升,特别是如果它们分配了大量内存.缺点是,当应用程序开始耗尽内存时,您的应用程序将基本停止(直到GC完成).
*要启用此模式,请将以下内容插入您的app.config或web.config:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)