Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa dispose () và Finalize () trong C #

Các phương thức xử lý () và hoàn thiện () là các phương thức của C # được gọi để giải phóng các tài nguyên không được quản lý do một đối tượng nắm giữ. Phương thức dispose () được định nghĩa bên trong giao diện IDis Dùng trong khi đó, phương thức Finalize () được định nghĩa bên trong đối tượng lớp. Sự khác biệt chính giữa dispose () và Finalize () là phương thức dispose () phải được người dùng gọi một cách rõ ràng trong khi đó, phương thức Finalize () được gọi bởi trình thu gom rác, ngay trước khi đối tượng bị hủy. Hãy để chúng tôi nghiên cứu một số khác biệt khác giữa chúng với sự giúp đỡ của một biểu đồ so sánh được hiển thị dưới đây.

Biểu đồ so sánh

Cơ sở để so sánhvứt bỏ ()hoàn thiện ()
Xác địnhPhương thức dispose () được định nghĩa trong giao diện IDis Dùng giao diện.Phương thức Finalize () id được định nghĩa trong lớp java.lang.object.
Cú phápcông khai void Vứt bỏ () {
// Loại bỏ mã ở đây
}
bảo vệ void hoàn thiện () {
// mã quyết toán tại đây
}
GọiPhương thức dispose () được gọi bởi người dùng.Phương thức hoàn thiện () được gọi bởi trình thu gom rác.
Mục đíchPhương thức dispose () được sử dụng để giải phóng các tài nguyên không được quản lý bất cứ khi nào nó được gọi.Phương thức Finalize () được sử dụng để giải phóng các tài nguyên không được quản lý trước khi đối tượng bị phá hủy.
Thực hiệnPhương thức dispose () sẽ được thực hiện bất cứ khi nào có phương thức close ().Phương thức hoàn thiện () sẽ được thực hiện cho các tài nguyên không được quản lý.
Truy cập chỉ địnhPhương thức dispose () được khai báo là công khai.Phương thức Finalize () được khai báo là private.
Hoạt độngPhương thức dispose () nhanh hơn và xử lý ngay một đối tượng.Phương pháp hoàn thiện chậm hơn so với xử lý
Hiệu suấtPhương thức xử lý () thực hiện hành động tức thời do đó, không ảnh hưởng đến hiệu suất của các trang web.Phương thức hoàn thiện () chậm hơn ảnh hưởng đến hiệu suất của các trang web.

Định nghĩa vứt bỏ ()

Phương thức dispose () giải phóng các tài nguyên không được quản lý được giữ bởi một đối tượng của lớp. Các tài nguyên không được quản lý là các tệp, các kết nối dữ liệu, v.v. Phương thức dispose () được khai báo trong giao diện IDisposeizable và nó được lớp thực hiện bằng cách triển khai IDis Dùng giao diện. Phương pháp này không được gọi tự động. Lập trình viên phải triển khai nó theo cách thủ công khi bạn đang tạo một lớp tùy chỉnh sẽ được người khác sử dụng. Phương thức có cú pháp sau:

 công khai void dispose () {// Loại bỏ mã ở đây} 

Trong cú pháp trên, bạn có thể quan sát rằng phương thức được khai báo là công khai. Đó là bởi vì phương thức này được định nghĩa trong giao diện IDis Dùng và nó phải được thực hiện bởi lớp thực hiện giao diện này. Vì vậy, để cung cấp khả năng truy cập cho lớp triển khai, phương thức được khai báo là công khai.

Phương thức này được gọi thủ công bởi mã của một chương trình khi nó được triển khai để gọi. Hiệu suất của các phương thức là nhanh và nó giải phóng tức thời các tài nguyên được nắm giữ bởi đối tượng của một lớp.

Định nghĩa hoàn thiện ()

Phương thức Finalize () được định nghĩa trong lớp đối tượng . Nó được sử dụng cho các hoạt động dọn dẹp. Phương thức này được gọi bởi trình thu gom rác khi tham chiếu của một đối tượng không được sử dụng trong một thời gian dài. Trình thu gom rác tự động giải phóng các tài nguyên được quản lý nhưng nếu bạn muốn giải phóng các tài nguyên không được quản lý như xử lý tệp, kết nối dữ liệu, v.v., phương thức hoàn thiện phải được thực hiện thủ công. Trình thu gom rác gọi phương thức hoàn thiện () ngay trước khi nó phá hủy hoàn toàn đối tượng.

Cú pháp của phương thức quyết toán ():

 được bảo vệ void Finalize () {// mã quyết toán tại đây} 

Trong cú pháp trên, phương thức Finalize () được khai báo là được bảo vệ. Lý do đằng sau điều này là, phương thức hoàn thiện () không thể truy cập được từ bên ngoài lớp và chỉ có thể truy cập được đối với trình thu gom rác.

Phương thức Finalize () ảnh hưởng đến chi phí hiệu năng vì nó không giải phóng bộ nhớ ngay lập tức. Trong C #, phương thức hoàn thiện được gọi tự động với các hàm hủy.

Sự khác biệt chính giữa dispose () và Finalize ()

  1. Phương thức dispose () được định nghĩa trong IDis Dùng giao diện. Mặt khác, phương thức hoàn thiện () được định nghĩa trong đối tượng lớp.
  2. Phương thức xử lý () phải được người lập trình gọi thủ công bên trong mã, trong khi phương thức hoàn thiện sẽ được trình thu gom rác tự động gọi ra trước khi phá hủy đối tượng.
  3. Phương thức xử lý có thể được gọi bất cứ lúc nào, trong khi phương thức hoàn thiện được gọi bởi trình thu gom rác khi thấy rằng đối tượng đó đã không được tham chiếu trong một thời gian dài.
  4. Phương thức dispose () được triển khai trong một lớp sau khi triển khai IDis Dùng giao diện. Phương thức hoàn thiện () chỉ được triển khai cho các tài nguyên không được quản lý vì các tài nguyên được quản lý sẽ tự động được giải phóng bởi trình thu gom rác.
  5. Trình xác định truy cập của phương thức dispose () là công khai vì nó được định nghĩa trong giao diện IDis Dùng và nó sẽ được thực hiện bởi lớp thực hiện giao diện này do đó nó phải được công khai. Mặt khác, phương thức hoàn thiện () đã bảo vệ bộ xác định truy cập để nó không thể truy cập được đối với bất kỳ thành viên nào bên ngoài lớp.
  6. Phương thức dispose () nhanh và giải phóng đối tượng ngay lập tức do đó, nó không ảnh hưởng đến chi phí hiệu năng. Phương thức Finalize () chậm hơn và không giải phóng tài nguyên mà đối tượng nắm giữ ngay lập tức.

Phần kết luận:

Bạn nên sử dụng phương thức dispose () trên phương thức Finalize () vì nó nhanh hơn hoàn thiện. Ngoài ra, nó có thể được gọi bất cứ lúc nào, khi cần thiết.

Top