【问题标题】:Speed up JSON Serialization from C# to JSON加速从 C# 到 JSON 的 JSON 序列化
【发布时间】:2015-03-19 14:36:49
【问题描述】:

我想将我的数据集序列化为 JSON

这是我的ASMX序列化对象的sn-p代码

        [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 秒即可完成查询执行并从数据库中检索数据。需要很长时间的是序列化过程 有没有比这运行得更快的功能?请发布名称库或函数和基准,如果我有好的重大变化,我会更新这篇文章。

干杯。

更新 这就是我爱你们的原因,在你们好心人的建议下,我加快了速度,这是我“调整”一点的事情。

正如@Saravanan 所说,我已经减少了我的 BO 上所有未使用的(或很少使用的)。这是一个成功的调整。从 300 秒(5 分钟)到 18 秒。

正如@sanguaire 所说,我正在尝试使用 fastJSON 库 (download here),编译为 dll,添加对我的项目的引用和这个速度。

为我检索 200.000 个数据所需的时间大约是 14 秒到 18 秒。这是我的 17 列基准。

谢谢大家的意见。这么晚才回复很抱歉。我会(如果我的分数达到投票标准)在这里对你的两个答案都投赞成票。

【问题讨论】:

  • 你的 bo 对象有多大,它是嵌套的吗?
  • @Saravanan 它有50个属性,所有成员只有code { get; set; } 。它有 50 个属性,但就我而言,我只对它们使用 10 个属性。属性计数有效果吗?所以我会用更少的成员创建新的 BO,因为当前的 BO 成员对象是供我的团队使用的
  • 肯定会产生影响...另外,我相信属性是简单类型...在这种情况下会有所帮助
  • 是的,所有属性都是简单类型,例如字符串和整数。那么你有什么建议@Saravanan?
  • 创建一个有 10 个属性的对象并检查.. 它应该会加快速度..

标签: javascript c# json serialization asmx


【解决方案1】:

您可以在 codeproject 上找到一篇关于 JSON 序列化的不同库(带有基准)的好文章。

你可以在这里找到它Article about JSON libraries

再见。

【讨论】:

  • 请发布主要答案及其包含的内容,因为您只提供了链接。您知道不建议仅使用链接发布解决方案吗?我将在这里更新基准。
  • 是的,我知道,但是这篇文章处理了很多库,我不想重复这篇文章;)
  • 这篇文章太棒了 .. 因为这篇文章以某种方式将 fastJSON 加粗为快,所以记住它对于大型数据集非常快,但与复杂对象不兼容,例如:包含许多其他模型的模型(提示:fastJSON 中的类型)...因此,如果您需要使用 fastJSON,最好单独序列化每个对象,以解决 fastJSON 的对象复杂性问题
【解决方案2】:

看到这个: http://aumcode.github.io/serbench/

图表(速度和有效载荷大小):

典型人物/单身,list[100],list[5000]... http://aumcode.github.io/serbench/Specimens_Typical_Person-201507121220/web/overview-charts.htm

纠缠对象图/会议/参与者/朋友... 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" 它将在磁盘上生成网络报告

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多