gpt4 book ai didi

.net - 如何减少 .NET 垃圾收集的频率?

转载 作者:行者123 更新时间:2023-12-04 05:43:13 25 4
gpt4 key购买 nike

我有一个处理大量小对象的应用程序,例如每秒 2000 条消息。一条消息大约 100 个字节,也许更少。该应用程序在负载下运行了 6 个半小时,在此期间它有 264 416 个第 0 代集合,
166 699 第一代和 69 608 第二代。这分别是每秒 11.6、7.3 和 3 次收集。

问题是如何减少垃圾收集的频率?

更新:
应用程序是从 WCF 接收消息的服务器,通过几个处理模块将它们推送并保存到数据库中。

我的印象是 GC 应该在一段时间后适应并增加生成大小,但显然情况并非如此。

更新 2 : 正如 leppie's answer 中的建议服务器模式下的 GC 确实使收集次数减少了 10 倍。此外,(正如 Richter 所描述的那样)频繁收集似乎不是一件坏事。

最佳答案

是什么让您认为这对您产生了影响?特别是,gen-0 系列非常非常便宜——值得鼓励。

我会更多地研究“”可能导致其中一些请求将 gen-0 转义为 gen-1 的原因;我是否不必要地捕获任何物体,例如通过事件?”。

当然,还有一点要看的是:有没有什么地方可以避免创建不必要的对象,例如:

  • 您是否在可能是 StringBuilder 的循环中进行字符串连接?反而?
  • 任何可以使用正确长度初始化以避免重新分配的中型到大型集合?
  • 任何可以重复使用的暂存缓冲区?例如,您是否进行了大量使用 byte[] 的编码工作?简要介绍一种方法,其中 byte[]可以作为划痕区域传递,还是从游泳池中抓取?
  • 任何其他可以缓存和重用的东西——例如,new Regex("some literal")在方法中创建,可以将其制成静态字段,并为性能而编译
  • 任何可以使用实习的密集字符串解析? (不一定是内置的内部人员)
  • 关于.net - 如何减少 .NET 垃圾收集的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4931309/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com