Xin chào bạn!
Hãy đăng ký thành viên để được cập nhật nhiều thông tin kiến thức hữu ích từ diễn đàn.
Đăng ký | Đăng nhập
Hệ thống mới thay đổi thuật toán mã hóa nên các bạn vui lòng vào Quên mật khẩu để tạo mật khẩu mới.

Kenh radio online [NEW]


#3197 30/09/2011 12:08 PM
Nhóm :
Member
Tham gia:
07-12-2010
Bài viết:
3
Lần thăm:
35

Cách sử dụng GC.SuppressFinalize

Hi cả nhà,

E sử dụng detructors của 1 Class như sau

public class A : GridView
        {
            // Many properties and events up

            // Detructors
            ~A()
            {
                Dispose();
                GC.SuppressFinalize(this);
            }
        }

Cho e hỏi e sử dụng detructors và GC.SuppressFinalize như vậy có được ko, trong trường hợp đó có giúp tăng tốc được ứng dụng hay không :D

Cám ơn nhiều ạ ^^


#3302 23/11/2011 09:06 AM
Nhóm :
Member
Tham gia:
23-11-2011
Bài viết:
1
Lần thăm:
6
Trích bài của: VnDevil

Hi cả nhà,

E sử dụng detructors của 1 Class như sau

public class A : GridView
        {
            // Many properties and events up

            // Detructors
            ~A()
            {
                Dispose();
                GC.SuppressFinalize(this);
            }
        }

Cho e hỏi e sử dụng detructors và GC.SuppressFinalize như vậy có được ko, trong trường hợp đó có giúp tăng tốc được ứng dụng hay không :D

Cám ơn nhiều ạ ^^


Thật ra cách dùng của bạn không có gì sai về mặt lập trình nhưng nó sẽ làm chậm hệ thống. Chúng ta cần nhớ là .net framework sẽ tự động thu gom những object không cần dùng đến nữa để tối ưu hệ thống. Nên code của bạn bị thừa khi gọi GC.SupressFinalize, thêm 1 điều nữa là detructors của object sẽ không làm việc hiệu quả vì GC gọi nó sẽ gọi hàm Dispose trước khi cả destructor nên bạn gọi như vậy là thừa và chỉ làm chậm quá trình GC mà thôi.
Theo quan điểm của tôi bạn chỉ việc kế thừa IDisposable và implement Dispose là đủ. Khi cần bạn gọi GC sẽ thu hồi vùng nhớ cho bạn.
Một cách cụ thể hơn:

class A : IDisposable
{

private void Dispose(bool isDispose)
{
// TODO something else to dispose completly
if (isDispose)
GC.SupressFinalize();
}

public void Dispose()
{
Dispose(true);
}
}




Những thành viên thích:
1 thành viên thích bài viết này:
Zydar (05/12/2011 10:21 AM)