У меня есть таблица данных jQuery, и я использую ajax для ее заполнения. Данные из таблицы данных C # преобразуются в строку JSOn в API веб-метода, а результат передается в таблицу данных. Это работает нормально, когда у меня есть несколько тысяч строк данных, но если у меня есть что-то вроде 100 000 строк, я получаю ошибку памяти. Я искал эту проблему и пытался реализовать некоторые предложения, но это не сработало. Я не верю, что у меня есть круговая ссылка, потому что (я думаю) в этом случае даже тот, у которого меньше данных, потерпит неудачу. Вот что у меня есть (пока), где в ответ на нажатие кнопки отправки заполняется таблица данных:
var tblFacCert = $("#tblFacCert").DataTable({
jQueryUI: true,
data: [],
dom: 'lfrtip',
processing: true,
stateSave: true,
....
});
$("#btnSubmit").on("click", function (event) {
var facCertUrl = "../services/easg.asmx/GetComplianceReportData";
var facCertParams = "{ 'startDate': '" + $("#tbStartDate").val() + "', 'certID': '" + $('#ddlCertificate').val() + "'}";
populteTable(facCertUrl, facCertParams, tblFacCert);
})
function populteTable(ws_url, parameters, table) {
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
url: ws_url,
cache: false,
data: parameters,
}).done(function (result) {
table.clear().draw();
table.processing = true;
jResult = JSON.parse(result.d);
table.rows.add(jResult).draw();
}).fail(function (jqXHR, textStatus, errorThrown) {debugger
alert(textStatus + ' - ' + errorThrown); <--- Here I can see the following error thrown
});
}
// Error:
Exception of type 'System.OutOfMemoryException' was thrown.
StackTrace:
at System.Text.StringBuilder.ToString()
at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj,
SerializationFormat serializationFormat)
at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)
at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)
ExceptionType:System.OutOfMemoryException
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string GetComplianceReportData(string startDate, string certID)
{
DateTime dtStartDate = Convert.ToDateTime(startDate);
int iCertItemID = int.Parse(certID);
DataTable dt = FacCompliance.GetFacCompliances(dtStartDate, iCertItemID);
string JSONresult;
JSONresult = JsonConvert.SerializeObject(dt);
/* I tried this, as was suggested in a post, no luck */
//StringBuilder sb = new StringBuilder();
//StringWriter sw = new StringWriter(sb);
//using (JsonWriter writer = new JsonTextWriter(sw))
//{
// var serializer = new JsonSerializer();
// serializer.Serialize(writer, dt);
//}
return JSONresult;
}
другое предложение, изменение web.config:
<configuration>
<appSettings>
....
<add key="aspnet:MaxJsonDeserializerMembers" value="500000"/>
</appSettings>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647"/>
</webServices>
</scripting>
</system.web.extensions>
Я также попытался добавить «serevrSide: true» для инициализации рассказа данных, но получаю эту ошибку, если я сделаю это:
"Unhandled exception at line 36, column 442 in https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js
0x800a138f - JavaScript runtime error: Unable to set property 'data' of undefined or null reference"