我已经为我们公司建立了一套内部网站来管理我们的一些流程。我一直注意到这些页面有大量的内存泄漏,导致页面使用远远超过150 MB的内存,这对于一个由单个表单和一次显示7-10行数据的GridView组成的网页来说是荒谬的。有时数据一整天都不更改。这是一个问题,因为它会由于缺乏可用内存而降低我们客户端计算机的速度。
经过一些测试后,内存泄漏似乎非常容易重现,而且非常明显。我创建了一个带有以下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中运行这个网站显示,在20-30秒的时间内,内存使用量高达25兆。让它运行几分钟,内存会上升到70兆等等。
我是否使用了错误的计时器和更新面板,或者这是一个纯粹的Asp.net问题,没有解决办法?
注意:我说的不是服务器上使用的内存,而是客户机上使用的内存。
**编辑:**看起来这是Chrome的问题。Firefox和IE8在长时间运行此页面时似乎没有任何内存问题。
2条答案
按热度按时间zbdgwd5y1#
.NET不一定会使用所有内存。请参阅How can I determine how much memory my .NET program is using?
我曾经读过一篇关于它的很好的文章,但是我现在找不到了。如果我找到了,我会更新这个答案。
**编辑:**这里有一个很好的例子:Link还有一个:http://www.getdotnetcode.com/gdncstore/free/Articles/The%20Memory%20Mystery.htm
wz3gfoph2#
我知道它已经有一段时间以来,最后的答案,但也许我的答案会帮助一些人。我有类似的问题。我需要计时器工作的背景。我结束了更新面板与计时器导致内存泄漏。我的计时器是在更新面板内。使更新面板不可见的
Visible:=False
解决了这个问题。它看起来像页面被重新绘制每一秒导致主要内存使用积累。