我正在使用一个非常简单的asp.net mvc应用程序,其中包括Entity Framework 6.0.2和.Net 4.5.1:
public class HomeController : Controller
{
public ActionResult Index()
{
int count;
using (var db = new LocalContext())
{
count = db.Counters.Count();
}
return View(count);
}
}
public class Counter
{
public int Id { get; set; }
}
public class LocalContext : DbContext
{
public DbSet<Counter> Counters { get; set; }
}
如果我对其进行负载测试,最终会出现内存溢出异常。 (tinyget -srv:localhost -port:<port> -uri:/home/index/ -threads:30 -loop:5000
)。在性能监视器中,我看到第二代堆稳步增长。如果我使用较小的循环值(比如500),大小会增加直到tinyget停止。然后堆大小保持不变(至少20分钟,之后我停止了服务器)。
我做错了什么?
编辑
所以我尝试了Simon Mouriers的建议并且省略了EF代码。然后我就没有内存问题了。所以我想,也许如果我使用发布版本而不是调试版本,会有所不同。确实如此!一段时间后释放了内存,我可以对站点进行高负载测试。然后我切换回调试模式看看是否可以获得更多信息,结果...即使在调试模式下也再没有问题了。FML,我花了一整天的时间去解决它,现在我无法再现这个问题了。
int count = 0; return View(count);
替换代码似乎并没有展示问题,这表明问题出在 EF 上而不是其他地方? - ta.speot.is