Почему таймеры / панели обновления Asp.net пропускают память в Chrome и ее можно исправить / обойти? - PullRequest
5 голосов
/ 16 июня 2010

Я создал набор внутренних веб-сайтов для нашей компании, чтобы управлять некоторыми из наших процессов.Я заметил, что эти страницы имеют большие утечки памяти, которые заставляют страницы использовать более 150 МБ памяти, что нелепо для веб-страницы, состоящей из одной формы и GridView, который отображает 7-10 строк данных ввремя, иногда с данными, не меняющимися в течение целого дня.Это проблема, потому что она замедляет работу наших клиентских машин из-за нехватки доступной памяти.

После некоторых испытаний выясняется, что утечка памяти чрезвычайно легко воспроизводится и очень заметна.Я создал страницу со следующей разметкой asp.net:

<body>
<form id="form1" runat="server">
<div>
    <asp:scriptmanager ID="Scriptmanager1" runat="server"></asp:scriptmanager>    
    <asp:Timer ID="timer1" runat="server" Interval="1000" />

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>
</body>

Для этого нет абсолютно никакого кода.Это вся страница.Запуск этого сайта в Chrome показывает использование памяти до 25 мегабайт в течение 20-30 секунд.Если оставить его включенным на несколько минут, объем памяти увеличится до 70 мегабайт и т. Д.

Неправильно ли я использую таймеры и панели обновления, или это чисто проблема Asp.net без каких-либо действий?

Примечание: я не говорю о памяти, используемой на сервере, я говорю о памяти, используемой на клиенте.


Редактировать: Ну, похоже, этопроблема с Chrome.Firefox и IE8, по-видимому, не имеют проблем с памятью во время работы этой страницы в течение длительного периода времени.

Ответы [ 2 ]

2 голосов
/ 16 июня 2010

.NET не обязательно использует всю эту память. См. Как определить, сколько памяти использует моя программа .NET?

Однажды я прочитал действительно хорошую статью об этом, но сейчас не могу ее найти. Я обновлю этот ответ, если сделаю.

Редактировать: Вот хороший: http://blogs.msdn.com/b/tess/archive/2006/09/06/742568.aspx И еще: http://www.getdotnetcode.com/gdncstore/free/Articles/The%20Memory%20Mystery.htm

1 голос
/ 29 ноября 2016

Я знаю, что прошло много времени с момента последнего ответа, но, возможно, мой ответ кому-нибудь поможет. У меня была похожая проблема. Мне нужен был таймер, работающий на фоне. Я закончил с панелью обновления с таймером, вызывающим утечку памяти. Мой таймер был внутри панели обновления. Создание панели обновлений невидимым с Visible:=False решило проблему. Похоже, страница перерисовывается каждую секунду, что приводит к значительному увеличению использования памяти.

...