Я пытаюсь использовать IPinnable и GetPinnableReference (). Но я видел, что в этом топи c мало документации. Поэтому я должен задать здесь несколько вопросов
IPinnable : Используется ли IPinnable где-нибудь в структуре? В частности, полагаются ли на него некоторые механики C#? Например, fixed
может полагаться на GetPinnableReference ()?
MemoryHandle : в MemoryHandle есть три параметра (указатель, GCHandle, IPinnable). Внутренне объекту, который содержит IPinnable, иногда необходимо вызвать GCHandle.Allo c, чтобы получить дескриптор. Затем этот дескриптор передается в MemoryHandle. При вызове Dispose в MemoryHandle GCHandle освобождается. Но в утилите MemoryHandle также вызывается открепление от IPinnable. Итак, теперь у меня есть два варианта: либо вызов Unpin
на IPinnable
, либо вызов Dispose
на MemoryHandle
.m Итак, чтобы убедиться, что я правильно понял это, сделайте MemoryHandle и объект IPinnable оба должны принять заботиться об утилизации, чтобы GCHandle был освобожден только один раз? Если это даже GCHandle, потому что я мог бы также передать не GCHandle, другими словами, просто оставьте его по умолчанию и передайте только собственный указатель. Поскольку MemoryHandle - это структура, которую я не могу передать в распоряжение собственной памяти, мне нужно поместить ее в IPinnable
. Так что, в конце концов, я, возможно, не понимаю, почему GCHandle
вообще передается MemoryHandle
. Я просто мог бы очистить GCHandle
в IPinnable.Unpin()
.
GetPinnableReference : есть ли другое место, кроме фиксированного, где GetPinnableReference
используется?
Было бы неплохо, если бы кто-нибудь мог помочь мне найти хорошую документацию по этим вопросам?