我试图在C#和.NET一个游戏,我正打算实现一个更新在游戏世界中的游戏对象的消息。 这些消息将是C#的参考对象。
我想这种做法,因为做这种方式会更容易通过网络发送他们,如果我希望游戏是多人。
但是,如果我有很多的消息,会不会是垃圾收集相当紧张? 并不会影响游戏? 消息类本身是具有4名或5个成员相当小至多。
这些消息将产生一对夫妇每秒钟用于在游戏世界中的每个对象。
我试图在C#和.NET一个游戏,我正打算实现一个更新在游戏世界中的游戏对象的消息。 这些消息将是C#的参考对象。
我想这种做法,因为做这种方式会更容易通过网络发送他们,如果我希望游戏是多人。
但是,如果我有很多的消息,会不会是垃圾收集相当紧张? 并不会影响游戏? 消息类本身是具有4名或5个成员相当小至多。
这些消息将产生一对夫妇每秒钟用于在游戏世界中的每个对象。
在以后的版本中的GC,但更确切地说4.5,异步运行世代级别0和1这大大降低GC的影响。
如果你的对象是短命的,他们不应该产生等级0的大部分时间通过。 0级是最快的一代由GC来清理。
底线,我不会考虑过早优化我的代码生怕GC性能。
过早的优化是所有罪恶的 DonaldKnuth 根
就个人而言,我建议这个文章的更深层次的理解
在.NET垃圾收集器具有3代,第0代,第1代和第2代每次GC未能收集的对象中生成,该对象将被提升到下一代。
您可能会遇到问题,如果你的对象比85KB大。 这些对象将被自动存储在大对象堆。 大对象堆将被自动收集在下列情况下:
System.GC.Collect
被称为第2代。 问题是,被收集大对象堆时,对于对象的存储器被释放,但LOH并不压实。 因为LOH是零散的,你可能会得到SystemOutOfMemory
抛出的异常,如果没有对蕙你的对象足够大的空间。
技术,比如对象池通常用于改善LOH的性能。 http://en.wikipedia.org/wiki/Object_pool_pattern
来源: http://msdn.microsoft.com/en-us/magazine/cc534993.aspx
UPDATE:净4.5.1将允许你这样做使用GC.Collect的API应用程序中的LOH按需压缩。