Здравствуйте, m2user, Вы писали:
M>ReadOnlyMemory появился только в свежих версиях .NET. А до этого всё спокойно делалось через GCHandle.Alloc(..., GCHandleType.Pinned).
Ровно его же и использует ReadOnlyMemory.
M>И ничего сложного в нем нет, если побитовая совместимость гарантирована.
M>M>GCHandle gch = new GCHandle();
M>try {
M> gch = GCHandle.Alloc(..., GCHandleType.Pinned);
M> SomeExternalMethod(gch.AddrOfPinnedObject())
M>} finally {
M> if (gch.IsAllocated){
M> gch.Free();
M> }
M>}
M>
Зачем всё вот это, когда есть fixed? Он сделает ровно то же без лишних приседаний с finally.
Пинить руками нужно только тогда, когда Alloc и Free делается в разных местах.