我对使用大量内存的项目感到担忧。我已经使用Entity Framework配置了我的MVC 5项目。我也使用Autofac。
通过执行以下操作找到我的存储库类和服务类(位于同一个项目中):
builder.RegisterAssemblyTypes(typeof(PlanRepository).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces().InstancePerLifetimeScope();
(与该项目中的服务类似。)
现在我可以看到调试时我初始化我的_dbContext(如果它还没有),最后我可以看到dispose被成功调用。启动页面后,内存使用量约为460兆,如果我继续刷新,它会略微上升并达到500兆,当我停止10~15分钟后,它会回落到大约460兆。
现在我想测试一下,所以我使用以下模型创建了一个DBSet:
public class Email
{
public int ID { get; set; }
public string Subject { get; set; }
*[StringLength(32, ErrorMessage = "Must be under 32 characters")]*
public string From { get; set; }
public DateTime Sent { get; set; }
public long Size { get; set; }
public Boolean HasAttachment { get; set; }
}
需要考虑两件事:
现在当我添加对我的方法的调用以通过以下方式检索数据时:
var emails = _dbEmailService.GetAllEmails().AsQueryable();
我的内存使用率高达 2Gig ...然后每次刷新再加上1 Gig 。
这真的很糟糕不是吗?我可以帮忙找出原因吗? 我在这上花了1.5天而且非常沮丧。感谢。
答案 0 :(得分:0)
感谢大家的帮助。好吧,你的问题让我回过头来重新评估我的分页方法。最初我遇到了与分页相同的问题,这就是我开始尝试检索所有记录以查看瓶颈所在的原因。但是现在仔细观察之后,我注意到分页并没有真正起作用,因为我的Lambda正在检索所有记录,而不仅仅是IQueryable。然后出现了第二个问题,即对DB的请求需要3秒钟。这是由于ID列上缺少索引。一旦我添加它,一切都开始工作,内存占用少,速度非常快。从屏幕上休息几个小时就可以做到。 :)