gpt4 book ai didi

c# - Json.Net反序列化内存不足问题

转载 作者:太空狗 更新时间:2023-10-29 19:52:22 24 4
gpt4 key购买 nike

我有一个 Json,其中包含一个存储 base64 编码字符串的数据字段。此 Json 被序列化并发送给客户端。

在客户端,newtonsoft json.net 反序列化器用于取回 Json。但是,如果数据字段变大(~ 400 MB),反序列化器将抛出内存不足异常:数组维度超出支持的范围。我还在任务管理器中看到,内存消耗确实增长很快。

知道这是为什么吗? json 字段或其他字段是否有最大大小?

代码示例(简化):

HttpResponseMessage responseTemp = null;
responseTemp = client.PostAsJsonAsync(client.BaseAddress, message).Result;

string jsonContent = responseTemp.Content.ReadAsStringAsync.Result;
result = JsonConvert.DeserializeObject<Result>(jsonContent);

结果类:

public class Result
{

public string Message { get; set; }
public byte[] Data { get; set; }

}

更新:

我认为我的问题不是序列化程序,而是试图在内存中处理如此庞大的字符串。在我将字符串读入内存的那一刻,应用程序的内存消耗激增。该字符串上的每个操作都相同。目前,我认为我必须找到一种方法来处理流并停止立即将所有内容读入内存。

最佳答案

使用 JsonConvert.DeserializeObject 读取大型 JSON 字符串会消耗大量内存。因此,解决此问题的方法之一是,您可以创建一个 JsonSerializer 实例,如下所示。

 using (StreamReader r = new StreamReader(filePath))
{
using (JsonReader reader = new JsonTextReader(r))
{
JsonSerializer serializer = new JsonSerializer();
T lstObjects = serializer.Deserialize<T>(reader);
}
}

这里 filePath :- 是你当前的 Json 文件和T :- 是您的通用类型对象。

关于c# - Json.Net反序列化内存不足问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33480477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com