double.
C# Eğer olması gerektiğidir struct yalnızca ilkel veri türlerini kullanır ve C++ içindeki yerel yapınızla tam olarak aynı düzende bulunur, bu kısıtlamaları manuel bellek m ile alabilirsiniz. anagement ve güvenli olmayan kod. Bonus olarak, marshalling'den kaçınarak performansı artıracaksınız.
bellek ayır:
IntPtr arr = Marshal.AllocHGlobal (sizeof (MyStruct) * 256);
Bu temelde malloc
, yani tahsis bellek GC bilinci dışındadır.
IntPtr öğesini yerel koda MyStruct[256]
gibi iletebilirsiniz ve yalnızca IntPtr işaretlenecek olan belleğe göre değil, sıralanır. Yerel ve yönetilen kod doğrudan aynı hafızaya erişebilir. Eğer bellek ile bittiğinde free
için,
Marshal.FreeHGlobal (arr);
unutmayın
static unsafe MyStruct GetMyStructAtIndex (IntPtr arr, int index)
{
MyStruct *ptr = ((MyStruct *)arr) + index;
return *ptr;
}
static unsafe void SetMyStructAtIndex (IntPtr arr, int index, MyStruct value)
{
MyStruct *ptr = ((MyStruct *)arr) + index;
*ptr = value;
}
: okumak için
/C# işaretçileri kullanmak, C# Dizideki yapılar yazma o.
hiçbir geçici çözüm yok mu? bunu C++ gibi yapabilir miyim? – uray
@uray önerebileceğim tek şey düzenli bir dizidir. Eğer bu mümkün değilse, o zaman ... –