2013-07-09 23 views
5

Tôi biết những kiến ​​thức dưới đây:Sự khác nhau giữa tham chiếu yếu và tham chiếu yếu kém là gì?

Tham chiếu yếu cho phép thu gom rác để thu thập các đối tượng khi vẫn cho phép các ứng dụng để truy cập vào các đối tượng.

Vì vậy, nếu đối tượng đã được khai hoang, bạn phải tạo lại khi cần.

Sau đó, sự khác nhau giữa tham chiếu yếu và tham chiếu yếu kém là gì? Tôi nghĩ về nó như sau: (theo msdn)

tham chiếu yếu kém: nếu GC lấy lại đối tượng, đối tượng thực sự là phát hành.

tham chiếu yếu dài: nếu GC lấy lại đối tượng, đối tượng vẫn là tồn tại (vì được lưu trong bộ nhớ cache).

Vậy ai đó có thể cho tôi biết thêm chi tiết?

+1

nó được giải thích tốt ở đây: http://stackoverflow.com/questions/310685/weak-references –

Trả lời

5

ngắn

Mục tiêu của một tham chiếu yếu ngắn trở nên rỗng khi đối tượng là khai hoang bởi thu gom rác thải. Tham chiếu yếu là chính đối tượng được quản lý và có thể bị thu gom rác giống như bất kỳ đối tượng được quản lý khác . Tham chiếu yếu ngắn là hàm tạo mặc định cho WeakReference.

dài

Tham chiếu yếu dài được giữ lại sau khi phương pháp Finalize của đối tượng đã được gọi. Điều này cho phép đối tượng được tạo lại, nhưng trạng thái của đối tượng vẫn không thể đoán trước. Để sử dụng tham chiếu dài, hãy chỉ định đúng trong hàm tạo WeakReference.

Nếu loại của đối tượng không có một phương pháp Finalize, kẻ yếu chức năng tham khảo ngắn áp dụng và tham chiếu yếu chỉ có hiệu lực cho đến khi mục tiêu được thu thập, có thể xảy ra bất cứ lúc nào sau khi finalizer được chạy.

Để thiết lập tham chiếu mạnh và sử dụng lại đối tượng, hãy đúc Thuộc tính mục tiêu của WeakReference cho loại đối tượng. Nếu thuộc tính Target trả về null, đối tượng đã được thu thập; nếu không, bạn có thể tiếp tục sử dụng đối tượng vì ứng dụng có lấy lại tham chiếu mạnh mẽ cho đối tượng đó.

Hướng dẫn Sử dụng Tài liệu tham khảo Yếu

Sử dụng tài liệu tham khảo yếu dài chỉ khi cần thiết như trạng thái của đối tượng là không thể đoán trước sau khi quyết toán. Tránh sử dụng các tham chiếu yếu đối với các đối tượng nhỏ vì chính con trỏ có thể lớn hơn hoặc lớn hơn.

Tránh sử dụng các tham chiếu yếu làm giải pháp tự động cho bộ nhớ sự cố quản lý. Thay vào đó, hãy phát triển chính sách lưu bộ nhớ đệm hiệu quả cho việc xử lý các đối tượng của ứng dụng của bạn là .

Reference

+0

tôi đã được biết đến bài viết này, nhưng câu hỏi của tôi là nếu GC đòi lại đối tượng, đối tượng vẫn tồn tại ??? –

+1

Tôi tự hỏi tại sao tài liệu đó lại mô tả kém những gì đang diễn ra? Một tham chiếu yếu ngắn sẽ bị vô hiệu hóa khi mục tiêu của nó đủ điều kiện để hoàn thành ngay lập tức hoặc ngừng tồn tại hoặc khi tham chiếu yếu * chính nó * trở thành đủ điều kiện để hoàn thành. Một tham chiếu dài yếu sẽ bị vô hiệu khi mục tiêu của nó ngừng tồn tại hoặc khi tham chiếu yếu kém trở thành đủ điều kiện để hoàn thành. Lưu ý rằng các tham chiếu yếu có thể bị vô hiệu ngay cả khi mục tiêu của chúng đang hoạt động - một điểm không được đề cập trong tài liệu! – supercat