GC.Collect
xuất hiện để bắt đầu thu gom rác trong chuỗi nền và sau đó quay lại ngay lập tức. Làm thế nào tôi có thể chạy đồng thời GC.Collect
- tức là, chờ thu gom rác hoàn thành?Chạy GC. Thu thập đồng bộ
Đây là ngữ cảnh của các thử nghiệm NUnit. Tôi đã thử thêm cài đặt gcConcurrent vào tệp app.config của hội đồng kiểm tra của tôi và tôi đã thử cùng với nunit.exe.config. Không có bất kỳ hiệu ứng nào - khi tôi gỡ lỗi, tôi vẫn có thể thấy trình hoàn thiện đang chạy trên "Chủ đề kết thúc GC", chứ không phải là luồng được gọi là GC.Collect
("TestRunnerThread") của NUnit và cả hai luồng đều chạy đồng thời.
Thông tin cơ bản: Tôi muốn thử nghiệm của mình thất bại nếu chúng bị rò rỉ (không gọi Dispose on) là một lớp cụ thể. Vì vậy, tôi đã thêm một finalizer cho lớp đó đặt một lá cờ tĩnh wasLeaked
; sau đó thử nghiệm của tôi TearDown gọi GC.Collect()
và sau đó ném nếu wasLeaked
là đúng sự thật. Nhưng nó không thất bại về mặt xác định, bởi vì khi nó đọc wasLeaked
, finalizer thường chưa được gọi. (Nó không một số xét nghiệm sau đó thay vào đó, sau khi thu gom rác thải cuối cùng kết thúc.)
Hoàn hảo! Điều này thật đúng với gì mà tôi đã tìm kiếm. Cảm ơn! –