.net MVC и JQuery ajax обновляют утечку памяти - PullRequest
0 голосов
/ 27 мая 2011

Я просматривал форумы, пытаясь найти решение своей проблемы, но не могу найти ничего похожего. Я вижу много проблем с утечкой памяти, но все еще не могу найти один конкретный для меня. Я тоже новичок в jquery.

Итак, у меня есть страница .net mvc, которая запрашивает базу данных и обновляет div каждые 3 секунды. Я замечаю, что он постоянно поглощает память, а затем в конечном итоге падает, когда он достигает около 1 ГБ памяти. Я использую IE8. Вот эта страница:

<script type="text/javascript">
var refreshInterval = 3000;
var refreshInSeconds = refreshInterval / 1000;

$(document).ready(
                 function () {
                     $("#timerValue").text(refreshInSeconds.toString());
                 });

$(function () {
    setInterval(
            function () {
                $.ajax({
                    url: '<%:Url.Action("RefreshRunningSuites")%>',
                    context: document.body,
                    cache: false,
                    success: function (data) {
                        $("div#runningSuites").html(data);
                    }
                });
            },
            refreshInterval);
});

</script>
<h2>
    Currently Running Suites</h2>
<br />

<div id="runningSuites">

 <% Html.RenderPartial("RunningSuites", Model); %>
</div>
<div id="footer">

    Listing refreshes every <label id="timerValue"></label> seconds.
</div>

Пользовательский элемент управления RunningSuites перебирает список, содержащийся в переданном объекте viewmodel, и отображает новую табличную строку для каждой записи в списке внутри обычной HTML-таблицы

Вот ActionResult RunningSuites

public ActionResult RefreshRunningSuites()
{
    RunningSuitesViewModel viewModel = new RunningSuitesViewModel(RunManager.GetCurrentlyRunningSuites());
    return PartialView("RunningSuites", viewModel);
}

Есть идеи, как устранить эту утечку памяти? Спасибо.

1 Ответ

2 голосов
/ 28 мая 2011

Та же ситуация, что и у вас, сообщается здесь: http://forum.jquery.com/topic/memory-leaks-with-ajax-calls

Обходной путь (если вы используете ту версию <1.5 и она не очищена в 1.5+ - но вам нужно проверить эти версии, я не уверен, что она исправлена) </p>

Сначала очистите ваш контент (document.getElementById ("runningSuites")). innerHTML = "";

Это «возможно» было исправлено в jQuery 1.5 - если не использовать обходной путь, обведите его.

Fyi, чтобы помочь с утечками DOM, проверьте это, чтобы возможно получить больше информации

http://www.smallworkarounds.net/2009/04/jquery-leaking-memory-be-careful-while.html\

...