-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
High performance setup zh CN
这篇文档与**低内存方案**完全相反,如果您愿意增加内存开销和一些潜在的成本,以增强 ASF 的性能(CPU 速度方面),请阅读以下内容。
在一般情况的平衡调整中,ASF 已经尝试优先考虑性能部分,因此您没有很多优化 ASF 性能的余地,尽管仍然有一些选项可以做适当的调整。 但是,请记住,我们没有默认启用这些选项,这意味着它们并不能在大多数情况下保证平衡,因此您应该自己决定是否可以接受它们带来的内存开销。
以下技巧会造成严重的内存消耗,应谨慎使用。
ArchiSteamFarm.runtimeconfig.json
允许您调整 ASF 运行时环境,尤其是允许您在服务器 GC 和工作站 GC 之间切换。
垃圾回收器可自行优化并且适用于多种方案。 您可使用配置文件来基于工作负荷的特征设置垃圾回收的类型。 CLR 提供了以下类型的垃圾回收:
工作站垃圾回收,用于所有客户端工作站和独立 PC。 This is the default setting for the element in the runtime configuration schema.
服务器垃圾回收,用于需要高吞吐量和可伸缩性的服务器应用程序。 服务器垃圾回收可以是非并发或者是后台的。
您可以在**垃圾回收基础**阅读更多。
ASF 默认使用工作站 GC。 这主要是因为其在内存消耗和性能之间的良好平衡,这对于运行少数机器人来说已经足够了,因为通常单个并发后台 GC 线程足以快速地处理所有由 ASF 分配的内存。
但是,今天我们通常有很多 CPU 核心,ASF 也因此受益,在每个 CPU vCore 中都有一个专用的 GC 线程。 这可以极大地提高 ASF 执行繁重任务时的性能,例如解析徽章或库存页面,因为每个 CPU vCore 都可以提供帮助,而不是仅仅 2 个线程(主线程和 GC 线程)。 对于具有 3 个或更多 CPU vCore 的计算机,建议使用服务器 GC,如果您的计算机只有 1 个 CPU vCore,则会自动强制使用工作站 GC ,如果您只有2个,那么您可以考虑尝试两者(结果可能会有所不同)。
您可以将 ArchiSteamFarm.runtimeconfig.json
的 System.GC.Server
属性从 false
切换到 true
来启用服务器 GC。 请记住,您可能需要多次执行此操作,因为 ASF 在自动更新后仍默认使用 false
。
仅仅启用服务器 GC 本身不会导致增加很大的内存开销,但它具有更大的代数,因此会更少将内存返回给操作系统。 您可能会发现自己处于一个尴尬的情况,服务器 GC 显著提高了性能,并且您希望继续使用它,但同时您无法承受使用它带来的巨大内存消耗。 幸运的是,将 GCLatencyLevel 设置为 0
是一个两者兼顾的设置,服务器 GC 仍然启用,但会限制代数并且更关注内存消耗。
但是,如果内存对您来说不是问题(因为 GC 仍会根据您的可用内存自行调整),那么最好不要更改 GCLatencyLevel
,从而达到最佳性能。
- 确保您的
OptimizationMode
属性设置为默认值MaxPerformance
。 这是最重要的设置,因为使用MinMemoryUsage
值会对性能产生巨大影响。 - 将
ArchiSteamFarm.runtimeconfig.json
的System.GC.Server
属性从false
切换到true
来启用服务器 GC。 这将启用服务器 GC,与工作站 GC 相比,您可以通过瞬间增加的内存消耗确认启用了服务器 GC。 - 如果您无法承受如此巨量的内存消耗,可以考虑将
GCLatencyLevel
设置为0
实现二者之间的平衡。 但是,如果您可以负担得起这样的内存消耗,那么最好将其保持默认状态——服务器 GC 在运行时已经进行了自我优化,并且在您的操作系统真正需要时使用更少的内存。
如果您已启用服务器 GC 并保留 GCLatencyLevel
的默认设置,那么即使您启用成百上千个机器人,ASF 仍会有出色的性能。 CPU 不会再成为瓶颈,因为 ASF 能够在需要时发挥您的 CPU 的全部能力,从而缩短操作所需时间。