2009-04-01 16 views
6

Tôi đã quen thuộc với mẫu thử {} cuối cùng {}, mẫu using() {} như cách để đảm bảo Dispose() được gọi, nhưng đối với một trang ASP.NET, có an toàn không khi vứt bỏ các đối tượng được tạo trong phạm vi trang trên sự kiện Page_Unload? Nó sẽ có ý nghĩa để ghi đè lên phương thức Dispose() của Trang thay vào đó?Có an toàn để tin rằng Page_Unload sẽ luôn chạy và là một nơi tốt cho việc vứt bỏ() mã?

Tôi không chắc mã nào làm tăng sự kiện Page_Unload hoặc phương thức Page Dispose(), vì vậy tôi không biết những gì đảm bảo là nó sẽ chạy.

Trả lời

9

Sự kiện dỡ hàng được nâng lên trong vòng đời điều khiển ngay trước khi vứt bỏ. Vì chính trang đó là một điều khiển nên sự kiện dỡ bỏ được nâng lên cho nó. Mỗi điều khiển bạn thêm vào trang sẽ là một phần của vòng đời trang. Vì vậy, nếu bạn có một điều khiển mà cần phải làm một số dọn dẹp, kiểm soát chính nó nên xử lý bất kỳ có thể dọn dẹp trong chính nó. Bạn không cần phải lo lắng về điều này, miễn là điều khiển đã được thêm vào trang và tuân theo đúng nguyên tắc đóng gói.

documentation nói rằng bạn nên sử dụng tính năng này ngay cả "để thực hiện dọn dẹp cuối cùng cho các điều khiển cụ thể, chẳng hạn như đóng các kết nối cơ sở dữ liệu kiểm soát cụ thể". Đề xuất của tôi là tránh sự kiện dỡ hàng. Khi có thể thực hiện bất kỳ mã dọn dẹp nào sớm hơn là sau này, vì vậy hãy sử dụng "sử dụng" nếu bạn có thể. Theo một cách nào đó, nó giống như sự lựa chọn giữa việc sử dụng một biến "toàn cầu" trái ngược với một biến cục bộ, sau này là thích hợp hơn.

5

Tôi nghĩ rằng điều đó là an toàn. Page_Unload được cho là nơi dọn dẹp được thực hiện trong vòng đời của trang. Xem http://msdn.microsoft.com/en-us/library/ms178472.aspx có nội dung:

Sự kiện này xảy ra cho mỗi điều khiển và rồi đến trang đó. Trong điều khiển, hãy sử dụng sự kiện này để thực hiện dọn dẹp lần cuối cho các điều khiển cụ thể , chẳng hạn như đóng các kết nối cơ sở dữ liệu cụ thể đối với kết nối .

Đối với chính trang, sử dụng sự kiện này để thực hiện công việc dọn dẹp lần cuối, chẳng hạn như đóng tệp mở và kết nối cơ sở dữ liệu hoặc hoàn tất ghi nhật ký hoặc các tác vụ yêu cầu cụ thể khác.

Các vấn đề liên quan