.net MVC и jQuery ajax обновляют утечку памяти

#jquery #asp.net-mvc #memory-leaks #actionresult

#jquery #asp.net-mvc #утечки памяти #actionresult

Вопрос:

Я просмотрел форумы, пытаясь найти решение моей проблемы, но не могу найти ничего подобного. Я вижу множество проблем с утечкой памяти, но все еще не могу найти ни одной конкретной для меня. Я тоже довольно новичок в 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, и отображает новую tablerow для каждой записи в списке внутри обычной HTML-таблицы

Вот ActionResult RunningSuites

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

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

Комментарии:

1. Я не вижу в этом коде ничего, что могло бы вызвать утечку памяти. Можете ли вы показать что-либо из конструктора RunningSuitesViewModel или RunManager. Метод GetCurrentlyRunningSuites()?

Ответ №1:

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

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

Сначала очистите содержимое (document.getElementById(«runningSuites»)).innerHTML = «»;

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

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

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

Комментарии:

1. Спасибо, что, похоже, это исправили. О, и я использую jQuery 1.6.1, и эта ошибка все еще не исправлена.

2. прохладный. пожалуйста, отметьте ответ как завершенный выше, если это помогло. 1.6.1 и все еще не исправлено ?!?!? ого!