csharp / expert
Snippet
Low-Level Speicherbearbeitung mit unverwalteten Pointern
Durch die Verwendung des Schlüsselworts 'unsafe' und der 'fixed'-Anweisung ermöglicht C# direkte Zeigerarithmetik. Der 'fixed'-Block fixiert das verwaltete Array im Speicher und verhindert, dass der Garbage Collector es verschiebt, während der Pointer aktiv ist. Diese Technik wird für ultraschnelle Pufferverarbeitung eingesetzt, bei der Indexgrenzenprüfungen andernfalls Performanceeinbußen verursachen würden.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public unsafe class BufferProcessor{public void InvertBits(byte[] data){fixed (byte* pStart = data){byte* current = pStart;byte* pEnd = pStart + data.Length;while (current < pEnd){*current = (byte)(~(*current));current++;}}}}
Erklärung
1
fixed (byte* pStart = data)
Fixiert das Objekt im Speicher und erhält einen Pointer auf das erste Element.
2
*current = (byte)(~(*current));
Dereferenziert den Pointer, um eine bitweise NOT-Operation direkt im Speicher durchzuführen.