我与运行的应用看,所以我试图更好地利用内存传递给它定期相当大的JSON的斑点,如果可能的话,避免一些反序列化时,它上面85KB对象LOH分配。验证.NET中的瞬态内存分配差异?
我有.NET内存分析器和dotMemory但我对它们是如何被使用,所以我正在寻找一些建议有点生疏。
我的小控制台应用程序来分析在一个紧密的循环是简单地执行下面的场景,以获得一看分配回事。
byte[] incomingMessage = ....; // LOH
string json = Encoding.UTF8.GetString(incomingMessage); // another LOH
return JsonSerializer.Deserialize(json);
VS
byte[] incomingMessage = ....; // LOH
using (MemoryStream ms = new MemoryStream(incomingMessage))
{
using (StreamReader sr = new StreamReader(ms, Encoding.UTF8))
{
return JsonSerializer.Deserialize(sr);
}
}
我的理论是,我将有较少的LOH allocs和分裂所造成的第二代码片段比第一。
不过,我的问题是,我该如何验证?上述工具似乎做了一个伟大的工作(尤其是.NET Memory Profiler)比较快照以发现泄漏等,但它不是很明显我应该寻找我的需求。
如果使用Newtonsoft.Json还有就是解析JSON手动(http://insidethecpu.com/2013/06/19/json-parsing/),像XML解析器流的选项 - 他们解析块由块和不加载整个字符串到MEM。 – csharpfolk