IIS + Ajax UpdatePanel导致极端内存使用

时间:2010-11-26 14:18:39

标签: asp.net iis webforms

我有一个更新面板,结合了gridview,包括排序和分页。

我进入任务管理器来监视工作进程的内存使用情况(w3wp)

我所做的只是快速点击排序按钮。

每次点击,过程的内存增加约2 mb

所以我从30 MB的内存使用量变为大约90.然后它停在那里,没有内存被释放。我没有使用缓存或会话/应用程序状态。

导致这种情况的原因是,IIS中是否存在减少内存使用量的设置?

-

我还使用.net profiler来检查我的应用程序内存使用情况:4 MB,那么用于???的其他86是什么?即使它重新编写4mb,在任务管理器中也会显示90 MB,所以这让我相信其余的是非管理内存,IIS必须以某种方式使用它。

2 个答案:

答案 0 :(得分:0)

问题实际上是GridView,而不是UpdatePanel。它的记录存储在ViewState中,因此每次回发都会来回传递。此外,当您快速单击排序按钮时,您将生成多个排序数据的请求。根据您实现排序的方式,您可以复制记录集以便根据每次点击请求进行排序。

IIS中没有设置“减少内存使用”,因为它只是托管ASP.NET应用程序。您的应用程序需要解决自己的内存问题。

对大量数据进行排序可能是一个资源密集型过程。我想说最好的办法是在点击后点击排序按钮,并在数据排序后重新启用它。

答案 1 :(得分:0)

.NET GC是不确定的。这意味着只要它决定应该运行它就会运行。您可以尝试显式调用GC.Collect(),例如在Page_Init事件中查看内存是否仍在增加,但您最好将其从真实应用程序中删除,否则您只是阻止GC高效地完成其工作。