Есть ли способ хранить MemoryHandle исключительно в неуправляемой памяти?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли способ хранить MemoryHandle исключительно в неуправляемой памяти?

Сообщение Anonymous »


У меня есть метод, который принимает объект Memory. Я хочу закрепить его и сохранить указатель на него исключительно в неуправляемой памяти. Я знаю, что могу получить этот закрепленный указатель, используя memory.Pin() для создания MemoryHandle, а затем захватив memoryHandle.Pointer. Однако, поскольку я хочу сохранить это только в неуправляемой памяти, мне нужно убедиться, что управляемый объект, на который указывает дескриптор памяти, не будет собран, пока я не закончу с ним. Есть ли способ сохранить MemoryHandle в неуправляемой памяти без сбора базового объекта, а затем освободить его позже?

Я знаю, что теоретически это можно сделать, сохранив GCHandle рядом с моим указателем, а не удаляя его, когда я закончу. Проблема в том, что я не вижу способа получить GCHandle из объектов Memory или MemoryHandle, хотя я почти уверен в этом. по крайней мере, дескриптор памяти содержит внутренний дескриптор GC. Итак, если есть способ получить GCHandle из MemoryHandle, это будет хорошим решением этой проблемы.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»