Optimize marshalling managed arrays of object references

This commit is contained in:
2023-05-06 15:36:19 +03:00
parent 69cdb1268a
commit cae07f3623
6 changed files with 87 additions and 11 deletions

View File

@@ -770,12 +770,20 @@ namespace FlaxEngine.Interop
}
[UnmanagedCallersOnly]
internal static void SetArrayValueReference(ManagedHandle arrayHandle, IntPtr valueHandle, int index)
internal static void WriteArrayReference(ManagedHandle arrayHandle, IntPtr valueHandle, int index)
{
ManagedArray managedArray = Unsafe.As<ManagedArray>(arrayHandle.Target);
managedArray.ToSpan<IntPtr>()[index] = valueHandle;
}
[UnmanagedCallersOnly]
internal static void WriteArrayReferences(ManagedHandle arrayHandle, IntPtr spanPtr, int spanLength)
{
ManagedArray managedArray = Unsafe.As<ManagedArray>(arrayHandle.Target);
var unmanagedSpan = new Span<IntPtr>(spanPtr.ToPointer(), spanLength);
unmanagedSpan.CopyTo(managedArray.ToSpan<IntPtr>());
}
[UnmanagedCallersOnly]
internal static ManagedHandle LoadAssemblyImage(IntPtr assemblyPathPtr, IntPtr* assemblyName, IntPtr* assemblyFullName)
{