Poszukuję darmowych, w pełni zarządzanych implementacji pamięci współużytkowanej dla .NET (dopuszczalne jest wywołanie P/Inv, mieszane C++/CLI nie jest).W pełni zarządzane implementacje pamięci .NET w pamięci współużytkowanej?
Odpowiedz
Wygląda na to, że szukasz Memory-Mapped Files, które są obsługiwane w BCL .NET 4.0.
Począwszy od wersji .NET Framework 4, można użyć kodu zarządzanego dostępu do plików w pamięci, w taki sam sposób, natywne funkcje dostępu systemu Windows pliki w pamięci, jak to opisano w Zarządzanie pamięcią odwzorowany plików w Win32 w bibliotece MSDN
Wygląda na to, że te i wspólny muteks zamierzają załatwić sprawę. W końcu po prostu muszę przekazać kilka debelów z wyjątkowo niskim opóźnieniem w dwóch procesach dla niektórych rzeczy finansowych. Dzięki – em70
Cóż, framework .NET jest bezpłatny, zalecany. .NET 4.0 obsługuje klasy przestrzeni nazw System.IO.MemoryMappedFiles. Pamięć współdzielona jest dość drastycznym niedopasowaniem impedancji z pojęciem garbage collector, dlatego zajęło to trochę czasu. O ile nie korzystasz z wskaźników, kopiowanie z sterty GC do widoku MMF jest nieuniknione.
Inne mechanizmy IPC również korzystają z pamięci współdzielonej, po prostu nie są jawne, ponieważ są wbudowane w jądro. Wszystko to działa z mniej więcej taką samą prędkością, mikrosekundą, aby skonfigurować mapowanie, a następnie tylko przepustowość magistrali, aby wykonać kopię pamięci na pamięć. Pięć gigabajtów na sekundę jest najwolniejszymi, na jakie napotkasz.
Dziękujemy za użyteczne informacje o skuteczności, +1 :) – em70
This article wyjaśnia w sekcji 3, jak owijać MapViewOfFile i znajomych za pomocą P/Invoke.
i co z C++/CLI, który kompiluje się z MSIL, nie jest mieszany (np. Kompiluje się z '/ clr: pure')? –
Udostępnianie pamięci jest łatwe, ale zdajesz sobie sprawę, że można udostępniać tylko prymitywne typy? (i prawdopodobnie wartościują typy, w których wszyscy członkowie są prymitywni) –
Inną prawidłową opcją są NamedPipes –