前段時間接手了一個項目優化工作,在同等場景下內存使用從4G降低到200M。
項目是將實體序列化成字符串存入Redis, 再從Redis取出字符串反序列化,乍看沒什麼問題。 這裡忽略了一個事實,CLR會在內存駐留字符串,本意是調優性能,防止重復字符串帶來的開銷。由於這個項目中這種序列化的字符串沒有任何重用的價值,且個頭不小。在頻繁交互下內存使用一路上漲。 CLR沒有提供消除預留字符串的方式,只能避開這個問題,那就是不使用字符串,改用Byte[]。 Byte[]使用完畢會被GC回收,自然內存就降下來了。