2011-01-02 40 views
8

Tôi đang tìm kiếm các bộ nhớ chia sẻ miễn phí, được quản lý hoàn toàn cho .NET (P/Invoke có thể chấp nhận được, hỗn hợp C++/CLI là không).Quản lý bộ nhớ được chia sẻ hoàn toàn .NET.

+0

và điều gì về C++/CLI biên dịch thành MSIL, không được trộn lẫn (ví dụ: biên dịch bằng '/ clr: pure')? –

+1

Chia sẻ bộ nhớ dễ dàng, nhưng bạn có nhận ra rằng chỉ có các kiểu nguyên thủy mới có thể được chia sẻ? (và có lẽ là các loại giá trị mà tất cả các thành viên đều là nguyên thủy) –

+0

Một tùy chọn hợp lệ khác sẽ là NamedPipes –

Trả lời

8

Có vẻ như bạn đang tìm kiếm Memory-Mapped Files, được hỗ trợ trong .NET 4.0 BCL.

Bắt đầu với .NET Framework phiên bản 4, bạn có thể sử dụng mã được quản lý để truy nhập tệp ánh xạ bộ nhớ giống như cách các hàm Windows bản địa truy cập tệp ánh xạ bộ nhớ, như được mô tả trong Quản lý tệp ánh xạ bộ nhớ trong Win32 trong Thư viện MSDN

+0

Có vẻ như những thứ đó và một mutex được chia sẻ sẽ thực hiện thủ thuật. Sau khi tất cả tôi chỉ cần vượt qua một số đôi với độ trễ cực kỳ thấp trên hai quy trình cho một số công cụ tài chính. Cảm ơn – em70

15

Vâng, .NET framework là miễn phí, được khuyến nghị. .NET 4.0 hỗ trợ các lớp không gian tên System.IO.MemoryMappedFiles. Bộ nhớ chia sẻ là một trở kháng khá mạnh mẽ không phù hợp với khái niệm về một nhà sưu tập rác, đó là lý do tại sao phải mất một thời gian. Trừ khi bạn sử dụng con trỏ, sao chép từ đống GC sang chế độ xem MMF là không thể tránh khỏi.

Các cơ chế IPC khác cũng sử dụng bộ nhớ dùng chung, nó không rõ ràng vì nó được tích hợp vào hạt nhân. Tất cả điều này chạy ở cùng tốc độ, một micro giây để thiết lập ánh xạ và sau đó chỉ là băng thông bus để thực hiện sao chép bộ nhớ đến bộ nhớ. Năm gigabyte mỗi giây là chậm nhất bạn sẽ chạy vào.

+0

Cảm ơn thông tin hiệu suất hữu ích, +1 :) – em70

2

This article giải thích trong phần 3 cách bọc MapViewOfFile và bạn bè bằng P/Gọi.

Các vấn đề liên quan