JavaScriptSerializer Serialize() 方法无法返回非常大的 json 字符串

标签 javascript c# asp.net

我有一个网络服务功能,从中我获得了近 100 000 条记录。

 DataSet ds = new DataSet();
        ds = OdbcHelper.ExecuteDataset(Connection.ODBCConnection(), CommandType.StoredProcedure, "{ CALL Search_SP(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}", p);
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn col in ds.Tables[0].Columns)
            {
                row.Add(col.ColumnName.Trim(), dr[col]);
            }
            rows.Add(row);

        }
        return serializer.Serialize(rows);

这是我的 JavaScript:-

  var Data = Search(//passing parameters of function//);

        var data = "";
        data = Data['Search'];
        Data = jQuery.parseJSON(data);

当我调试代码时,我发现我的存储过程也工作正常。执行并获取超过 50,000 条记录需要不到 5 秒的时间。但是“返回serializer.Serialize(rows);”返回 json 字符串需要花费很多时间。 如果行数为 100,则需要 30-35 秒,对于 100k 记录,它几乎会死掉。不返回任何输出。看起来应用程序被挂起。

我无法理解为什么要花这么多时间。我的数据库中的记录数量每天都会增加 50 000 条以上。

最佳答案

我认为你应该将序列化器更改为netwonsoft Json.Net

您还可以创建一个比 datarow 更精简的类,然后序列化该类,另一个建议是将此调用分成较小的批处理(例如分页)

代码示例:

List<MyClass> list = new List<MyClass>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
  var myObj = new MyClass();
  myObj.MyColumn = dr["MyColumn"];
  .. // and so on all your columns as properties on MyClass
}
return  JsonConvert.SerializeObject(list);

关于JavaScriptSerializer Serialize() 方法无法返回非常大的 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32437672/

相关文章:

javascript - 如何在关闭模式后保留选中的复选框?

javascript - 使用 Jquery 从另一个 Select Option 禁用 Select Option

javascript - HTML Doctype 设置/IE Quirks 模式

c# - ASP.net Web 应用程序,通过创建服务向浏览器推送通知

c# - EF Core 中 .Configuration.ProxyCreationEnabled 的等价物是什么?

asp.net - 我有多个用户,我可以锁定网页以便一次只有一个用户可以更新记录吗?

asp.net - 执行 SSIS 包时出错

javascript - 链接的位置元素

c# - 如何通过带有密码的 neo4jclient 返回关系及其属性

c# - 将 JS OnClientClick 添加到代码隐藏中的按钮时出现问题