我有一个网络服务功能,从中我获得了近 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/