我有一个使用 .Net 4.0 的游戏服务器项目。我正在使用 MemoryCache 类并缓存许多可以由多个用户同时修改的对象,以实现快速 i/o 和同步。最近游戏发布后,我发现我的设计有问题。因为这些缓存对象是长生命周期的对象,它们都进入 GC gen 2,并且很难被释放,所以 gen 2 堆变得非常大(5 天后大约 8 GB)并且对于完整的 GC 来说花费的时间太长。
经过几天的谷歌搜索,我认为这也许是不使用长寿命对象来避免大 gen 2 堆的最佳方法。但我不知道该怎么办。这些对象是从db加载,根据用户请求修改,然后保存回db,序列化到byte[]太复杂,无法保存到memcached,甚至可以序列化,(从memcached读取->修改->写入back) 也不是线程安全的操作。
有什么建议么?