您可以使用 GarbageCollector.GCMode 在运行时禁用垃圾回收。这可以防止 CPU 出现峰值,但您的应用程序的内存使用量永远不会减少,因为垃圾回收器不会回收不再有任何引用的对象。
警告:禁用垃圾回收器需要仔细的内存管理。如果您没有仔细管理内存,托管堆会不断扩展,直到您的应用程序耗尽内存,操作系统将其关闭。
您可以使用以下 API 来微调对自动垃圾回收器的控制
System.GC.Collect
:执行完全的阻塞式垃圾回收。System.Gc.Collect
不会有任何效果。System.GC.Collect
来运行完全回收。GarbageCollection.CollectIncremental
:增量式运行垃圾回收器。您应该只在应用程序的性能关键的短时间段内禁用垃圾回收,当您能够计算和控制需要分配多少内存时。您应该立即在之后启用垃圾回收器,并经常分析您的项目,以确保您不会触发额外的托管分配,这可能会导致托管堆变得太大。
当您禁用垃圾回收器时,它不会停止您的应用程序执行垃圾回收。调用 System.GC.Collect
不会有任何效果,也不会启动回收。为了避免随着时间的推移内存使用量增加,您在管理内存时必须小心。理想情况下,您应该在禁用垃圾回收器之前分配所有内存,并在禁用垃圾回收器时避免额外的分配。
最佳实践是仅对长期存在的分配禁用垃圾回收器。例如,您可能希望在游戏级别加载之前为其分配所有所需的内存,然后禁用垃圾回收器以避免在级别期间的性能开销。在级别完成并且所有内存释放后,您就可以再次启用垃圾回收器并使用 System.GC.Collect
来回收内存,然后再加载下一个级别。
有关如何在运行时启用和禁用垃圾回收的更多详细信息,请参阅 GarbageCollector 脚本 API 页面。