###前提・実現したいこと
ASP.NET MVCを利用して、ajax通信の結果でhtml内の内容を更新するような実装を行っています。fixedTableHeader()をフラグインを利用するとメモリリークしているようです。fixedTableHeader()は、$.ajaxの応答で返されたtableタグ内のヘッダー部と一番左の列を固定したスクロールを行いたいからです。
###解決したい問題
メモリリークしないようにしたい。
tableタグ内のヘッダー部と一番左の列を固定したスクロールが行えるような変更方法があれば、fixedTableHeader()を利用しない方法でも構いません。
###該当のソースコード
cshtml
1 2@{ 3 ViewBag.Title = "Index"; 4} 5@section Header 6{ 7<script type="text/javascript"> 8 var resData = null; 9 $(function () { 10 $("td").on("click", function (e) { 11 alert("hello"); 12 draw(); 13 }); 14 15 function draw() { 16 $.ajax({ 17 type: "POST", 18 url: '@Url.Action("TableData", "Sample")', 19 success: function (data) { 20 $("#resiveData").empty(); 21 $("#resiveData").html(data); 22 $("#sampleTable").fixedTableHeader(); 23 }, 24 25 error: function () { 26 debugger; 27 } 28 }); 29 } 30 31 draw(); 32 setInterval(function () { draw(); }, 10000); 33 }); 34</script> 35 } 36 37<h2 > Index</h2 > 38<div id="resiveData"></div>
###試したこと
$("#sampleTable").fixedTableHeader();があるとメモリリークすることは分かりました。
定期的にヒープのスナップショットを見ると$.ajaxの応答結果で返されたtableへの参照が増えていました。
###補足です
Google ChromeのDeveloper ToolsのTimelLineを利用してメモリ使用状況を確認したところ、徐々にメモリ使用量が増えているように見えました。
また、IEのF12のメモリタブにて定期的にヒープのスナップショットを取り、スナップショットの差分を見ると、HTMLTableElement,HTMLTableDataCellElementあたりの保持されちているデータサイズが増えているようでしたので、メモリリークと判断しました。
###補足情報(言語/FW/ツール等のバージョンなど)
ASP.NET MVC
jQuery 1.10.2
fixed-table-headerは下記サイトの最新版を利用
https://github.com/hungnq1989/fixed-table-header
あなたの回答
tips
プレビュー