C # взаимосвязан с указателями - PullRequest
0 голосов
/ 09 ноября 2018

Я использую C #, но я работаю с неуправляемой памятью, чтобы избежать GC, чтобы перемещать память и увеличивать производительность (поэтому не фиксированную) для определенных буферов. Я нашел единственный способ применить блокированные операции к указателям C #, но у него действительно плохая производительность

Interlocked.Increment(ref *(long*)(pointer));

В C ++ у нас есть такие функции, как

long atomic_fetch_add(long * dest, long val)

или я могу найти в библиотеках Windows такие функции, как

LONG InterlockedAdd(LONG volatile *Addend, LONG Value);

но я не смог найти ни одного PInvoke, который бы позволял прямой вызов операции Atomic с использованием указателя, что привело бы к вызову с более высокой производительностью. C # будет производить вызов с низкой производительностью. Любые мысли о том, как использовать блокировку низкого уровня, чтобы я мог что-то вроде Interlocked.Increment(pointer), чтобы он принимал мой указатель, а не C # ref.

...