JavaScriptSerializer Serialize()方法无法返回非常大的json字符串
问题描述:
我有一个web服务函数,我从中获得将近100 000条记录。JavaScriptSerializer Serialize()方法无法返回非常大的json字符串
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: -
当我调试,我发现我的存储过程也能正常工作的代码。执行和获取超过50 000条记录需要不到5秒的时间。但是“return serializer.Serialize(rows);”花了很多时间返回json字符串。 如果行数为100,则需要30-35秒,对于100k记录,它几乎会死亡。不会返回任何输出。类似应用程序的问题会被吊死。
我无法理解为什么需要这么多时间。我的数据库中的记录数量每天会增加50 000多。
答
我想你应该改变序列化netwonsoft Json.Net
你也可以创造比数据行精简类,并序列化一个代替另一个建议是分裂的小批量此调用(如分页)
代码示例:
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);
如果您知道预期的结果,请尝试手动序列化,例如'for .. json + ='{foo:“bar”}“',它可能会更快,因为您会假设类型而不是测试每种类型 –
没有办法查询和向用户显示100,000行数据将导致可用的应用程序。特别是如果数据每天增长50,000行。考虑分页或按需部分加载。 –
它不是我需要获取数据库中的所有记录,但我将不得不显示至少100000条记录minimum.I已经在grid.But使用分页。但序列化方法本身需要很多时间来返回数据 – Pwavel002