json.net内存不足异常

时间:2018-03-08 20:45:33

标签: c# asp.net-mvc json.net

我有一个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异常。是否有一些我做错了或缺少的东西让这项工作?

0 个答案:

没有答案