gpt4 book ai didi

c# - SerializeObject 抛出 System.OutOfMemoryException

转载 作者:太空狗 更新时间:2023-10-29 23:13:00 31 4
gpt4 key购买 nike

我对“JsonConvert.SerializeObject”有一个严重的问题我需要序列化超过 500,000 条字典记录才能使序列化抛出以下错误;系统.OutOfMemoryException。我试图在 foreach 中单独序列化每个键值对,但它已被锁定。显然这是一个优化问题,但我不知道从哪里开始,线程要分部分序列化?这些函数使用很少的值就可以正常工作。我的代码:

string json = JsonConvert.SerializeObject(DatatableToDictionary(dt), Newtonsoft.Json.Formatting.Indented);

public List<Dictionary<string, object>> DatatableToDictionary(DataTable dt, List<DataColumn> columns)
{
return dt.Rows.Cast<DataRow>().Select(
r => columns.ToDictionary(c => c.ColumnName, c => r[c.ColumnName])).ToList();
}

最佳答案

当您处理大量数据时,您可以将其流式传输到一个文件中,以避免一次将所有数据都存储在内存中。

var filePath = @"C:\somewhere.json";

using (var fs = File.Open(filePath, FileMode.CreateNew))
using (var sw = new StreamWriter(fs))
using (var jw = new JsonTextWriter(sw))
{
var serializer = new JsonSerializer();
serializer.Serialize(jw, dictionary);
}

这将一次序列化一点,避免内存中有一个巨大的字符串。

关于c# - SerializeObject 抛出 System.OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39598171/

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