我目前正在开发一个 ASP.NET MVC 应用程序,其中控制器使用存储库通过实体框架 ORM 访问数据。
下面是我的 ASP.NET MVC 控制器用于访问数据的接口和存储库的基本示例。
我遇到大量存储库留在 GC Gen2 内存中的情况,我想知道这是否是我的设计模式的结果?
对此的任何建议将不胜感激。我知道架构可以改进,这样的评论也会受到赞赏,但我的主要关注点是我的高内存使用率。
控制器
[SessionState(SessionStateBehavior.ReadOnly)]
public class GridCustomerServiceController : Controller
{
private ICustomerServiceRepository _customerServiceRepository { get; set; }
#region Constructor
public GridCustomerServiceController()
{
_customerServiceRepository = new CustomerServiceRepository();
}
#endregion Constructor
#region Overrides
protected override void Dispose(bool disposing)
{
this._customerServiceRepository.Dispose();
base.Dispose(disposing);
}
#endregion Overrides
[GridAction]
[Authorize(Roles = "user")]
public ActionResult _CustomerServicesSelect()
{
return View(new GridModel
{
Data =
(_customerServiceRepository.GetServicesByCustomerId(1))
});
}
界面
using System.Linq;
public interface ICustomerProductRepository
{
void Dispose();
IQueryable<CustomerProduct> GetProductObjectsByCustomerId(int cid);
void Add(Customer b);
void Delete(Customer c);
void Save();
}
存储库
public class CustomerProductRepository : ICustomerProductRepository
{
private myEntities db = new myEntities();
#region Dispose Methods
~CustomerProductRepository()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (db != null)
{
db.Dispose();
db = null;
}
}
#endregion Dispose Methods
public void Delete(CustomerProduct c)
{
db.CustomerProducts.DeleteObject(c);
}
public void Save()
{
db.SaveChanges();
}
public void AddCustomerProduct(CustomerProduct b)
{
db.AddToCustomerProducts(b);
db.SaveChanges();
}
...