Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次使用新的JQuery插件DataTables时加载的change事件导致内存泄漏_C#_Javascript_Jquery_Memory Leaks_Datatables - Fatal编程技术网

C# 每次使用新的JQuery插件DataTables时加载的change事件导致内存泄漏

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=

我有内存泄漏的问题

我在Html页面中的select标记(Select2)后面显示一个表(带有),该标记包含一个事件
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);
}