Câu hỏi của bạn về việc bạn có nên gọi luôn hay không Disposethường là một cuộc tranh luận sôi nổi. Xem blog này để biết góc nhìn thú vị từ những cá nhân được tôn trọng trong cộng đồng .NET.
Cá nhân tôi nghĩ quan điểm của Jeffrey Richter rằng việc gọi điện Disposekhông bắt buộc là cực kỳ yếu. Ông đưa ra hai ví dụ để biện minh cho ý kiến của mình.
Trong ví dụ đầu tiên, anh ấy nói việc gọi Disposecác điều khiển Windows Forms là tẻ nhạt và không cần thiết trong các tình huống chính thống. Tuy nhiên, ông không đề cập đến việc Disposethực sự được gọi tự động bởi các vùng chứa điều khiển trong các kịch bản chính đó.
Trong ví dụ thứ hai, anh ta nói rằng một nhà phát triển có thể giả định không chính xác rằng phiên bản từ IAsyncResult.WaitHandlenên được xử lý mạnh mẽ mà không nhận ra rằng thuộc tính khởi tạo bộ xử lý chờ một cách lười biếng dẫn đến một hình phạt hiệu suất không cần thiết. Tuy nhiên, vấn đề với ví dụ này là IAsyncResultbản thân nó không tuân thủ các nguyên tắc đã xuất bản của Microsoft để xử lý IDisposablecác đối tượng. Đó là nếu một lớp giữ một tham chiếu đến một IDisposablekiểu thì bản thân lớp đó sẽ thực thi IDisposable. Nếu IAsyncResulttuân theo quy tắc đó thì Disposephương pháp riêng của nó có thể đưa ra quyết định về việc thành viên nào trong số các thành viên của nó cần phải xử lý.
Vì vậy, trừ khi ai đó có lập luận thuyết phục hơn, tôi sẽ ở lại trại "luôn gọi là vứt bỏ" với sự hiểu biết rằng sẽ có một số trường hợp ngoài lề phát sinh chủ yếu do các lựa chọn thiết kế kém.
usingcấu trúc.