加速 JSON 从 C# 到 JSON 的序列化
Speed up JSON Serialization from C# to JSON
我想将我的数据集序列化为JSON。
这是我的 ASMX 序列化对象的代码片段
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetProviderMemberDetail(string jsonString)
{
BPMember bp = new BPMember();
List<BOProvider> listProvider = bp.GetProviderMemberDetail(jsonString);
return ConvertToSerializedJson(listProvider);
}
这是 ConvertToSerializedJson 的作用
public string ConvertToSerializedJson(Object listBO)
{
string jsonReturn = String.Empty;
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;
jsonReturn = serializer.Serialize(listBO);
return jsonReturn;
}
我要序列化的数据量很大,大约 200.000 个数据。
我试过这个方法,我的浏览器挂了,没有响应,我必须等待 6 分钟才能完成。
第二次尝试,我尝试了Newtonsoft.Json中的序列化函数,
添加了
using Newtonsoft.Json;
并使用
更改序列化器代码
return JsonConvert.SerializeObject(listProvider);
它加快了一点速度,但也使我的浏览器几乎挂起。全部连载完成需要4分钟
问题是,我怎样才能加快序列化速度?我的查询只需要 4 秒就可以完成查询执行并从数据库中检索数据。需要很长时间的是序列化过程
有没有比这更快 运行 的函数?请 post 库或函数的名称和基准,如果我有很好的重大更改,我会更新这个 post。
干杯。
已更新
这就是我爱你们的原因,在你们的建议下,我加快了速度 kind-guys,这里是我 "tweak" 一点点的事情。
正如@Saravanan 所说,我已经减少了我 BO 上所有未使用的(或很少使用的)。这是一个成功的调整。从 300 秒(5 分钟)到 18 秒。
正如@sanguaire 所述,我正在尝试使用快速JSON 库(download here),编译为dll,添加对我的项目的引用,这个速度有点快。
我检索 200.000 个数据所需的时间约为 14 秒到 18 秒。这是我的 17 列基准。
谢谢大家的意见。这么晚才回复很抱歉。我会(如果我的点数达到赞成票标准)在这里对你的两个答案投赞成票。
您可以在 codeproject 上找到一篇关于 JSON 序列化(带有基准)的不同库的好文章。
你可以在这里找到它Article about JSON libraries
再见。
看这个:
http://aumcode.github.io/serbench/
图表(速度和有效负载大小):
典型人数/单身,list[100],list[5000]...
http://aumcode.github.io/serbench/Specimens_Typical_Person-201507121220/web/overview-charts.htm
纠缠对象图/Conferences/participants/Friends...
http://aumcode.github.io/serbench/ObjectGraph_Conference-201507121245/web/overview-charts.htm
网络堆栈批处理...
http://aumcode.github.io/serbench/MsgBatching-201507121210/web/overview-charts.htm
我们还有 EDI X12 测试,尚未发布。像这样获取工具和 运行:
"sb edi.laconf" 它将在磁盘上生成网络报告
我想将我的数据集序列化为JSON。
这是我的 ASMX 序列化对象的代码片段
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetProviderMemberDetail(string jsonString)
{
BPMember bp = new BPMember();
List<BOProvider> listProvider = bp.GetProviderMemberDetail(jsonString);
return ConvertToSerializedJson(listProvider);
}
这是 ConvertToSerializedJson 的作用
public string ConvertToSerializedJson(Object listBO)
{
string jsonReturn = String.Empty;
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;
jsonReturn = serializer.Serialize(listBO);
return jsonReturn;
}
我要序列化的数据量很大,大约 200.000 个数据。
我试过这个方法,我的浏览器挂了,没有响应,我必须等待 6 分钟才能完成。
第二次尝试,我尝试了Newtonsoft.Json中的序列化函数, 添加了
using Newtonsoft.Json;
并使用
更改序列化器代码return JsonConvert.SerializeObject(listProvider);
它加快了一点速度,但也使我的浏览器几乎挂起。全部连载完成需要4分钟
问题是,我怎样才能加快序列化速度?我的查询只需要 4 秒就可以完成查询执行并从数据库中检索数据。需要很长时间的是序列化过程 有没有比这更快 运行 的函数?请 post 库或函数的名称和基准,如果我有很好的重大更改,我会更新这个 post。
干杯。
已更新 这就是我爱你们的原因,在你们的建议下,我加快了速度 kind-guys,这里是我 "tweak" 一点点的事情。
正如@Saravanan 所说,我已经减少了我 BO 上所有未使用的(或很少使用的)。这是一个成功的调整。从 300 秒(5 分钟)到 18 秒。
正如@sanguaire 所述,我正在尝试使用快速JSON 库(download here),编译为dll,添加对我的项目的引用,这个速度有点快。
我检索 200.000 个数据所需的时间约为 14 秒到 18 秒。这是我的 17 列基准。
谢谢大家的意见。这么晚才回复很抱歉。我会(如果我的点数达到赞成票标准)在这里对你的两个答案投赞成票。
您可以在 codeproject 上找到一篇关于 JSON 序列化(带有基准)的不同库的好文章。
你可以在这里找到它Article about JSON libraries
再见。
看这个: http://aumcode.github.io/serbench/
图表(速度和有效负载大小):
典型人数/单身,list[100],list[5000]... http://aumcode.github.io/serbench/Specimens_Typical_Person-201507121220/web/overview-charts.htm
纠缠对象图/Conferences/participants/Friends... http://aumcode.github.io/serbench/ObjectGraph_Conference-201507121245/web/overview-charts.htm
网络堆栈批处理... http://aumcode.github.io/serbench/MsgBatching-201507121210/web/overview-charts.htm
我们还有 EDI X12 测试,尚未发布。像这样获取工具和 运行: "sb edi.laconf" 它将在磁盘上生成网络报告