Tôi sẽ trải qua quá trình tinh chỉnh/chỉnh sửa tốc độ lớn của một trong các ứng dụng MVC lớn hơn của mình. Nó đã được triển khai để sản xuất cho một vài tháng nay, và tôi đã bắt đầu để có được thời gian chờ đợi cho các kết nối trong hồ bơi kết nối. Tôi đã theo dõi sự cố xuống các kết nối không được xử lý đúng cách.ASP MVC: Khi nào IController Dispose() được gọi là?
Trong ánh sáng đó, tôi đã kể từ khi thực hiện thay đổi này để điều khiển cơ sở của tôi:
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 giới thiệu một điều kiện chủng tộc? Vì
configManager
quản lýDataContext
hiển thị các thông sốIQueryable<>
cho chế độ xem, tôi cần đảm bảo rằngDispose()
sẽ không được gọi là trên bộ điều khiển trước khi chế độ xem kết thúc hiển thị. - Khung MVC có gọi
Dispose()
trên Bộ điều khiển trước hoặc sau khi chế độ xem được hiển thị không? Hoặc, khuôn khổ MVC có để lại cho đến GarbageCollector không?
Tôi rất mong chờ câu trả lời cho câu trả lời này! Câu hỏi tuyệt vời! –
Nếu không nhìn vào mã khác (của bạn hoặc ASP.NET MVC của ..) tại sao chính xác bạn cần phải null ra configManager? Điều đó có giúp được gì không? Hãy suy nghĩ cẩn thận trước khi bất kỳ bạn "DUH" tôi .. –
Tôi có nghĩa là trong một trường hợp chung như một điều kiện chủng tộc có thể dễ dàng được loại bỏ như vậy. Trong trường hợp cụ thể này, tôi nghi ngờ rằng một cá thể bộ điều khiển sẽ được sử dụng bởi nhiều hơn một luồng và do đó không có nguy cơ của một điều kiện chủng tộc nào. –