#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 и все еще не исправлено ?!?!? ого!