我有一个asp.net mvc
应用,而json.net
正在抛出一个内存不足的异常,因为我有很多我想要序列化的记录,占用大量内存。
我查看了这个performance article,直接使用JsonTextReader/JsonTextWriter
来手动序列化数据,但我仍然遇到了OOM异常。
这是我的目标。
public class ResourceAllocationDto
{
public IEnumerable<ResourceDto> UnassignedResources { get; set; }
public IEnumerable<ResourceDto> AssignedResources { get; set; }
}
public class ResourceDto
{
public Guid? PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public byte[] HeadShot { get; set; }
}
第一个属性UnassignedResources
现在为空,但AssignedResources
长约400个元素。它是HeadShot byte []
,这是一个人物形象,使得这么大的有效载荷。
这是我尝试手动序列化。
public static string ToResourceAllocationDtoJson(this ResourceAllocationDto p)
{
StringWriter sw = new StringWriter();
using (JsonTextWriter writer = new JsonTextWriter(sw)) {
writer.WriteStartObject();
writer.WritePropertyName("UnassignedResources");
writer.WriteStartArray();
foreach (var r in p.AssignedResources)
{
writer.WriteValue(r.PersonId);
writer.WriteValue(r.FirstName);
writer.WriteValue(r.LastName);
writer.WriteValue(r.HeadShot);
}
writer.WriteEndArray();
writer.WritePropertyName("AssignedResources");
writer.WriteStartArray();
foreach (var r in p.AssignedResources)
{
writer.WriteValue(r.PersonId);
writer.WriteValue(r.FirstName);
writer.WriteValue(r.LastName);
writer.WriteValue(r.HeadShot);
}
writer.WriteEndArray();
writer.WriteEndObject();
}
return sw.ToString(); //still throws OOM exception here
}
我仍然得到OOM异常。是否有一些我做错了或缺少的东西让这项工作?