我的應用程序使用Json.Net序列化一個對象,壓縮生成的JSON,然後將其保存到文件中。另外,應用程序可以從這些文件之一加載對象。這些對象可以在大小几十MB,我很擔心內存使用情況,由於道路現有的代碼創建大型字符串和字節數組: -我可以使用流對文件進行解壓縮和反序列化嗎?
public void Save(MyClass myObject, string filename)
{
var json = JsonConvert.SerializeObject(myObject);
var bytes = Compress(json);
File.WriteAllBytes(filename, bytes);
}
public MyClass Load(string filename)
{
var bytes = File.ReadAllBytes(filename);
var json = Decompress(bytes);
var myObject = JsonConvert.DeserializeObject<MyClass>(json);
}
private static byte[] Compress(string s)
{
var bytes = Encoding.Unicode.GetBytes(s);
using (var ms = new MemoryStream())
{
using (var gs = new GZipStream(ms, CompressionMode.Compress))
{
gs.Write(bytes, 0, bytes.Length);
gs.Close();
return ms.ToArray();
}
}
}
private static string Decompress(byte[] bytes)
{
using (var msi = new MemoryStream(bytes))
{
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(msi, CompressionMode.Decompress))
{
gs.CopyTo(mso);
return Encoding.Unicode.GetString(mso.ToArray());
}
}
}
}
我在想,如果在保存/載入的方法可以被流替換?我已經找到了與Json.Net一起使用流的例子,但我正在努力弄清楚如何適應額外的壓縮內容。
這可能成爲吸引您http://benfoster.io/blog/aspnet-web-api-compression –
@Roy我最近看到的OOM異常,這段代碼似乎是合乎邏輯的罪魁禍首。我正在等待VS內存分析器完成生成報告(這麼慢......),所以我很快就會有一個更好的主意,但是我認爲我會在重新編寫代碼的同時重新編排我的拇指! –
@AndrewStephens啊goodo。也許在問題中提到你的OOM。祝你好運! – MickyD