我想在ASP.NET MVC(5)应用程序中获得关于内存管理的更多信息。MVC应用程序内存管理
为了简单起见,让我们说,我们有角控制器,它不仅使一个http.get()
电话对我api controller
检索70 000件IEnumerable<CustomItem>
,之后将结果输出到页面(页面实现一个简单的页面)。
查看我的诊断工具(内存分析器)时,可以看到内存从50 MB(起始点)上升到300 MB(一旦检索到所有数据)。
这里是我不明白的事情:
为什么当我打开不同的浏览器相同的页面在同一时间(试图模拟更多的用户在同一时间访问该页面),该第二个用户的内存消耗不会再增加250 MB,但即使数据已被再次加载,它仍保持不变?
我在印象中,ApiController
不是在用户之间共享,而是为每个用户创建新实例。如果我是对的,情况确实如此,那么如果再有70 000件物品到达内存消费没有改变?
任何文章或解释将不胜感激。
加成1:
我的API控制器被从SharePoint
rerieving数据,因此我必须所有70项000记录在一次传递给我的角分量,从而事后实现分页。换句话说,我的组件只加载一次所有数据(70 000条记录),之后只显示一部分(否则,如果我在浏览器用于冻结的70 000个项目上使用了data-ng-repeat
)。
如果必要的话我一定能显示我ApiController
代码,但实际上它的代码只是3线,返回IEnumerable<CustomItem>
仅容纳三个字符串属性。这是它的样子:
public class SharepointFile
{
public string FileType { get; set; }
public string FileName { get; set; }
public string FilePath { get; set; }
}
您使用的数据库是?你的控制器源代码是什么样的?记录的平均大小是多少?很难说这里发生了什么。大部分的内存使用可能是应用程序本身,而不是数据,但我不确定。 –
需要更多信息,您是否将所有记录加载到内存中?如果分页是以正确的方式实现的(数据库端),那么你从来没有真正拥有'IEnumerable'上的70K记录,你只需要显示(当前页面),并且这不会代表高负载服务器。 –
JOBG
从你扔的数字看来,你正在将所有70k记录加载到内存中。对于单个分页查询,内存不应该增加太多。 – user449689