原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
前段时间接手了一个项目优化工作,在同等场景下内存使用从4G降低到200M。
项目是将实体序列化成字符串存入Redis, 再从Redis取出字符串反序列化,乍看没什么问题。
这里忽略了一个事实,CLR会在内存驻留字符串,本意是调优性能,防止重复字符串带来的开销。由于这个项目中这种序列化的字符串没有任何重用的价值,且个头不小。在频繁交互下内存使用一路上涨。
CLR没有提供消除预留字符串的方式,只能避开这个问题,那就是不使用字符串,改用Byte[]。
Byte[]使用完毕会被GC回收,自然内存就降下来了。