Tôi đã là một vấn đề với WeakReferences trong .NET 4.x, Tôi đã chạy thử nghiệm để đảm bảo một số đối tượng không được tham chiếu nữa (sử dụng WeakReferences) và tôi nhận thấy hành vi này là không đồng nhất giữa các phiên bản khuôn khổ:Làm thế nào để buộc thu gom rác đầy đủ trong .NET 4.x?
using System;
using System.Text;
using NUnit.Framework;
[TestFixture]
public class WeakReferenceTests
{
[Test]
public void TestWeakReferenceIsDisposed()
{
WeakReference weakRef = new WeakReference(new StringBuilder("Hello"));
GC.Collect();
GC.WaitForPendingFinalizers();
GC.WaitForFullGCComplete();
GC.Collect();
var retrievedSb = weakRef.Target as StringBuilder;
Assert.That(retrievedSb, Is.Null);
}
}
Kết quả:
.NET 2.0 PASS
.NET 3.0 FAIL
.NET 3.5 PASS
.NET 4.0 FAIL
.NET 4.5 FAIL
đây có phải là tài liệu ở đâu?
Có cách nào để buộc GC thu thập tham chiếu đó trong .NET 4.5 không?
Xin cảm ơn trước.
Chỉ cần một lưu ý: GC không thu thập đồ vật không thể truy cập trong chế độ gỡ lỗi. – 2kay
Cảm ơn tôi sẽ xem xét rằng – Guillaume86
Hmm, mã bạn đã hiển thị hoạt động cho tôi trên tất cả các phiên bản của khung. (Vâng, tôi không có NUnit cài đặt, vì vậy tôi chỉ sử dụng 'Debug.Assert' nhưng điều đó không nên thay đổi hành vi.) –