zza*_*ndy 8 .net garbage-collection
我有一个应用程序,处理大量的小对象,例如每秒2000条消息.一条消息大约是100字节,可能更少.应用程序运行在负载下6个半小时,在这段时间它有264 416 0 个根的集合,166 699 1 第一根和69 608 2 次根.这是每秒11.6,7.3和3个集合.
问题是如何减少垃圾收集频率?
UPD: 应用程序是一个从WCF接收消息的服务器,通过几个处理模块将它们保存到数据库中.
我的印象是GC应该在一段时间后适应并增加发电量,但事实并非如此.
UPD 2:正如leppie的回答所建议的那样,服务器模式下的 GC确实减少了10倍的收集.而且,正如Richter所描述的那样,频繁的收藏并不是一件坏事.
是什么让你觉得这会影响你?特别是,gen-0系列非常非常便宜 - 值得鼓励.
我会更多地看看""可能会导致其中一些请求将gen-0转换为gen-1; 我是否不必要地抓住任何物体,例如通过事件?"
当然,另一件需要注意的事情是:是否有任何地方可以避免创建不必要的对象,例如:
StringBuilder而不是吗?byte[]在方法中使用简短的编码工作,在那里它byte[]可以作为临时区域传递,还是从池中获取?new Regex("some literal")在方法内创建的,可以被创建为静态字段,以及为性能编译gcServer="true"如果您在 app.config 中启用,您将获得大约 10 倍的 GC 减少。但请注意,这不会提高性能,并且如果应用程序是桌面应用程序,您的应用程序的延迟可能会增加。
这是 app.config 设置:
<runtime>
<gcServer enabled="true"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |