我有一个UWP媒体应用程序,对于在后台模式下运行的Xbox One,它无法保持在128MB以下。使用内存探查器,似乎JSON.Net在反序列化甚至开始之前,反序列化完成和强制垃圾回收之后都利用了最多的资源。
基于我已阅读的所有内容,我正在实例化一个本地DefaultContractResolver,它不应缓存资源。我还从流中反序列化,根据JSON.Net,“性能技巧”是处理json的最节省内存的方法。我不知道为什么垃圾收集后仍然有这么多资源被保留。
反序列化之前:
反序列化和强制垃圾回收后:
反序列化代码:
public class JsonExtensions
{
public T DeserializeStringNoCache<T>(string json, JsonSerializerSettings settings = null)
{
using (Stream s = StringHelper.GenerateStreamFromString(json))
using (StreamReader sr = new StreamReader(s))
using (JsonReader reader = new JsonTextReader(sr))
{
JsonSerializer serializer = new JsonSerializer();
serializer.ContractResolver = new DefaultContractResolver();
return serializer.Deserialize<T>(reader);
}
}
}