产生的原因:

回收分配给没有引用的对象的内存。

如何避免产生GC:

  • 减少New产生对象的次数;如使用协程做等待操作时,可以使用参数存储 new WaitForSeconds();而不用每次创建。
  • 使用公用对象;如静态类或使用单例模式。
  • 使用对象池。
  • 使用StringBuilder来代替String去进行字符串拼接。

垃圾回收器多久自动运行一次

垃圾回收器的运行周期无法控制并不容易预测。但是在程序退出运行时肯定会运行。如果希望确保它运行可以使用GC.Collect()来建议CLR来进行垃圾回收。

GC.Collect()方法

调用该方法时就是在告诉.NET(.NET 是一个安全、可靠且高性能的应用程序平台。)尽可能快的进行垃圾回收。使用该方法时会让程序短暂的暂停。

C#资源类型介绍

托管资源和非托管资源:

  • 托管资源指的是**.NET可以自动进行回收的资源**,主要是指托管堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,由.NET运行库在合适时机调用垃圾回收器进行回收。

  • 非托管资源指的是**.NET不知道如何回收的资源**,最常见的一类非托管资源是包装操作系统资源的对象,例如:文件、窗口、网络连接、数据库连接、画刷、图标等。这类资源需要手动实现Finalize()或Dispose()方法释放资源。

C# 垃圾回收机制

官方文档