C# 每次使用新的JQuery插件DataTables时加载的change事件导致内存泄漏
我有内存泄漏的问题 我在Html页面中的select标记(Select2)后面显示一个表(带有),该标记包含一个事件C# 每次使用新的JQuery插件DataTables时加载的change事件导致内存泄漏,c#,javascript,jquery,memory-leaks,datatables,C#,Javascript,Jquery,Memory Leaks,Datatables,我有内存泄漏的问题 我在Html页面中的select标记(Select2)后面显示一个表(带有),该标记包含一个事件change() 我注意到任务管理器(IE或FireFox)出现了一些内存泄漏 我的代码运行良好,唯一的问题是内存泄漏 这是我的Html代码,我有两个表,第二个(table\u statistic\u 10\u ligne)在我单击第一个表的一行(table\u statistic\u 10)时显示,它显示了此行的详细信息: <body> <select id=
change()
我注意到任务管理器(IE或FireFox)出现了一些内存泄漏
我的代码运行良好,唯一的问题是内存泄漏
这是我的Html代码,我有两个表,第二个(table\u statistic\u 10\u ligne)在我单击第一个表的一行(table\u statistic\u 10)时显示,它显示了此行的详细信息:
<body>
<select id="Select2" name="D1" style="margin-right :50px">
</select>
<script>
$("#Select2").change(function () { selectStat10(Select2.options[Select2.selectedIndex].value) });
</script>
<table id="table_statistic_10" class="display">
<caption class="caption">Detail van verkopen</caption>
<thead>
</thead>
<tbody>
</tbody>
</table>
<br />
<br />
<table id="table_statistic_10_ligne" class="display">
<thead>
</thead>
<tbody>
</tbody>
</table>
<script type="text/javascript">
fillSlectTagStat10();
</script>
</body>
为什么?我解决了这个问题
我替换现有数据库中的数据表
if (typeof myTabEntete10 != 'undefined') {
$('body').off("click", '#table_statistic_10 tbody tr');
myTabEntete10.fnClearTable();
myTabEntete10.fnAddData(allstat10);
} else {
fillDataTableEntete10(allstat10, dstart, dend);
}
我使用了DataTables的
bDeferRender
选项,请参见。对于垃圾收集语言内存泄漏的说法,我总是相当怀疑。你怎么知道这个“泄漏”不仅仅是GC还没有运行?我不知道,这是问题所在。我不是javascript方面的专家,我一步一步地学习。你怎么知道gc运行了?在IE中,你可以调用CollectGarbage
。在Firefox中,请参阅。注意,这应该只针对您的测试,而不是针对您的生产代码。通常GC会在需要时自动运行。我使用CollectGarbage进行了测试,我将它放在函数getStatistic10()的开头,它不工作,这是正确的位置吗?何时调用GC?我不明白为什么这不是自动处理的?它是自动处理的。问题在于你的测试。仅仅测试几次并看到内存使用率上升是不够的。由于分配的内存量,通常需要进行足够的测试以触发GC运行。或者你可以尝试通过上面的一种机制来强制它。无论如何,您都不能只运行几次测试就声称内存泄漏。您必须给GC一个机会来回收不再可访问的内存。
function fillDataTableEntete10(data, dstart, dend) {
if ($("#table_statistic_10").css("visibility") == "hidden")
$("#table_statistic_10").css("visibility", "visible");
myTabEntete10 = $('#table_statistic_10').dataTable({
'aaData': data,
'aoColumns': [
{ "sTitle": "Nom" },
{ "sTitle": "Date" },
{ "sTitle": "Piece" },
{ "sTitle": "Tiers" },
{ "sTitle": "AmoutHT" },
{ "sTitle": "AmountTTC" },
{ "sTitle": "Quantite" }
],
"sPaginationType": "full_numbers",
"iDisplayLength": 10,
"bJQueryUI": true,
"bDestroy": true,
"bPaginate": true,
"bLengthChange": false,
"bFilter": true,
"bSort": false,
"bInfo": false,
"bAutoWidth": false,
"sDom": '<"top"f<"clear">>rt<"bottom"ilp<"clear">>'
});
myTabEntete10.$('tr').bind('click',function () {
var data = myTabEntete10.fnGetData(this);
$('tr').removeClass('row_selected');
$(this).addClass('row_selected');
loadData10(dstart, dend, data[2], data[3]);
delete data;
});
if (typeof myTabEntete10 != 'undefined') {
$('body').off("click", '#table_statistic_10 tbody tr');
myTabEntete10.fnClearTable();
myTabEntete10.fnAddData(allstat10);
} else {
fillDataTableEntete10(allstat10, dstart, dend);
}