Tôi đang thực hiện một cuộc tái cấu trúc / điều chỉnh tốc độ lớn của một trong những ứng dụng MVC lớn hơn của tôi. Nó đã được triển khai cho sản xuất trong vài tháng nay và tôi bắt đầu hết thời gian chờ kết nối trong nhóm kết nối. Tôi đã theo dõi vấn đề do các kết nối không được xử lý đúng cách.
Do đó, tôi đã thực hiện thay đổi này đối với bộ điều khiển cơ sở của mình:
public class MyBaseController : Controller
{
private ConfigurationManager configManager; // Manages the data context.
public MyBaseController()
{
configManager = new ConfigurationManager();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (this.configManager != null)
{
this.configManager.Dispose();
this.configManager = null;
}
}
base.Dispose(disposing);
}
}
Bây giờ, tôi có hai câu hỏi:
- Tôi có đang giới thiệu một điều kiện chủng tộc không? Vì trình
configManager
quản lýDataContext
hiển thịIQueryable<>
các tham số cho các khung nhìn, tôi cần đảm bảo rằng điều đóDispose()
sẽ không được gọi trên bộ điều khiển trước khi khung nhìn kết thúc hiển thị. - Khung MVC có gọi
Dispose()
Bộ điều khiển trước hoặc sau khi khung nhìn được hiển thị không? Hoặc, khuôn khổ MVC có để lại điều đó cho GarbageCollector không?