Tôi đang nghiên cứu khả năng viết lại một dịch vụ tương đối nhỏ từ C++ đến C#. Dịch vụ có hai chức năng chính:Tôi có thể yêu cầu .NET GC để lại một số chủ đề không?
- Thực thi các yêu cầu HTTP một lần trong một thời gian. Chúng liên quan đến một số nhiệm vụ cấp cao như mã hóa/giải mã JSON, mã hóa/giải mã base64 và các yêu cầu HTTP, mà C++ không phải là tuyệt vời;
- Thực hiện một số tác vụ liên quan đến âm thanh trong thời gian thực có thời hạn khó, C# không tuyệt vời.
Các tác vụ thời gian thực được xử lý bởi một thư viện riêng có nội dung luồng riêng và hầu như không tương tác với phần còn lại của dịch vụ. Phần còn lại của dịch vụ cung cấp cho nó một chút dữ liệu, thu được từ các yêu cầu HTTP, cứ 5 phút một lần hoặc lâu hơn.
Vấn đề là, vì phần thời gian thực có thời hạn khó, tôi không thể chịu đựng được tạm dừng GC trên các chủ đề của thư viện. Về phía mã của riêng tôi, cần có rất nhiều thời gian để GC chạy giữa các yêu cầu Web, nhưng tôi không thể chịu đựng được rằng nó khởi động trong khi tôi đang cố gắng nạp dữ liệu vào thư viện.
I found mà tôi có thể tạo một phần quan trọng trong đó bộ thu gom rác sẽ không bắt đầu sử dụng GC.TryStartNoGCRegion()
, giải quyết một nửa vấn đề.
Tuy nhiên, tôi vẫn không biết liệu có cách nào để báo cho .NET GC không để lại các chuỗi cụ thể không chạy mã được quản lý. Điều đó có thể không?
Xem [bài đăng này] (http://stackoverflow.com/questions/6005865/prevent-net-garbage-collection-for-short-period-of-time). Nó đi kèm với tất cả các loại cảnh báo. –
@ScottHannen, tôi tình cờ gặp nó (tôi liên kết với nó trong đoạn về GC.TryStartNoGCRegion). Tôi không nghĩ rằng nó cho thấy bất cứ điều gì về loại trừ các chủ đề từ bộ sưu tập rác thải. – zneak
CLR không thể tạm dừng một chuỗi đang bận chạy mã gốc. Cũng không phải, không có gốc rễ đối tượng nào có thể thay đổi trong khi nó đang chạy mã như vậy. Vì vậy, không cần phải "hỏi", chỉ cần đảm bảo mã thời gian quan trọng của bạn là mã gốc và nó không trở lại phương thức được quản lý trong khi thực hiện công cụ của nó và không có gì có thể xảy ra sai. –