實體框架內存未發布

c# entity-framework entity-framework-6

我正在使用一個非常簡單的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; }
}

如果我對它進行負載測試,我最終會得到Out Of Memory異常。 ( tinyget -srv:localhost -port:<port> -uri:/home/index/ -threads:30 -loop:5000 )。在性能監視器中,我看到第2代Heap穩步增長。如果我使用較小的循環值(比如500),則大小會增加,直到tinyget停止。然後堆大小保持不變(至少20分鐘,之後我停止了服務器)。

我究竟做錯了什麼?

編輯

所以我嘗試了Simon Mouriers的建議並省略了EF代碼。然後我沒有記憶問題。所以我想,也許如果我使用Release而不是Debug,它會有所作為。它做到了!內存在一段時間後被釋放,我可以在網站上施加高負荷。然後我切換回Debug,看看我是否可以獲得更多信息......即使在調試模式下也沒有問題了。 FML,我工作了一天,現在我再也無法重現了。

熱門答案

在您的情況下,繼承自DbContext的內部託管類將需要實現IDisposable並在LocalContext內添加以下內容:

public void Dispose()
{
    this.Dispose(true);
    GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
     if (disposing)
     {
        // Manage any native resources.
     }
   //Handle any other cleanup.
}

如果沒有專門覆蓋對dispose的調用,則using語句只會針對基類調用Dispose(),而您需要處理父類和基類。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因