Ale*_*ecu 19 c# garbage-collection
我正在尝试使用C#和.NET制作游戏,并且我计划实现更新游戏世界中游戏对象的消息.这些消息将是C#引用对象.
我想要这种方法,因为如果我想让游戏成为多人游戏,那么这样做会更容易通过网络发送它们.
但是,如果我有很多消息,垃圾收集器会不会很紧张?这不会影响游戏玩法吗?消息类本身很小,最多只有4或5个成员.
对于游戏世界中的每个对象,这些消息将每秒生成几次.
Yus*_*rke 21
在.NET中,垃圾收集器有3代,第0代,第1代和第2代.每次GC无法在一代中收集对象时,该对象将被提升为下一代.
如果对象大于85kb,则可能会遇到问题.这些对象将自动存储在大对象堆中.在以下情况下将自动收集大对象堆:
System.GC.Collect 被称为第2代.问题是,当收集大对象堆时,对象的内存被释放,但LOH没有被压缩.因为LOH是碎片化的,SystemOutOfMemory如果在LOH上没有足够大的空间用于对象,则可能会抛出异常.
诸如对象池之类的技术通常用于改善LOH的性能. http://en.wikipedia.org/wiki/Object_pool_pattern
来源:http://msdn.microsoft.com/en-us/magazine/cc534993.aspx
更新: .Net 4.5.1允许您使用GC.Collect API在您的应用程序中按需压缩LOH.