我們在WCF服務(我們的業務\應用層)中使用EF4.3.1。我們將EF Code First與現有數據庫和Fluent Mapping(EntityTypeConfiguraiton)結合使用。 爲每個請求創建一個DbContext實例,然後處理掉。實體框架消耗大量內存(可能的內存泄漏?)
我們有一個使用DbContext的通用存儲庫。
在測試服務器上運行時,我們發現業務層應用程序池在30分鐘內出現內存不足,並且有10個併發用戶。我們將IIS工作進程轉儲並發現EF耗費大量內存,EF創建的大型對象堆中有很多對象。我們可以在堆上看到從數據庫檢索到的數據的對象。不確定DbContext配置是否正在處理此問題。 GC中的%時間非常高(> 16%)。 我們在轉儲文件中注意到的一件奇怪事情是,存在一個巨大的字符串對象(大約87MB),存儲了我所有映射文件的字符串表示形式。我發現這很奇怪,
有沒有人遇到任何這樣的內存泄漏EF問題?另外請讓我們知道,如果我們使用EF有什麼問題。請讓我知道是否需要更多細節。
感謝 普拉薩德
編輯 我們使用注射DI AutiFac(WCF集成)的的DbContext的實例。 Dbcontext的生存時間是InstancePerLifeTime(每個http請求一個請求)。我們已經實現了這種方式來在一個HTTPrequest中的所有存儲庫實例中共享DbContext的實例。
我們訪問數據庫的方式是 //聲明 IGenericRepository UserRepository {獲取;集;}使用AutoFac
//地產注入//使用 VAR用戶= UserRepository.FindBy(U => u.userid ==「[email protected]」);
我們沒有在存儲庫中使用顯式事務。
您能向我們展示一下您如何使用EF進行一些事務的例子嗎? – Jorge
@Jorge,請找到編輯原來的問題。 – Prasad
我們對此做了一些分析,看來像Sum \ Average這樣的操作通過一對多關係導致緩慢。我們將這些操作中的一部分移至了存儲的特效庫,並提高了性能。這也減少了內存壓力,我們仍然很好的調整將基於我們的研究結果添加評論 – Prasad