Warum gibt es 2 verschiedene Möglichkeiten, Speicher in .NET zu sperren? Was ist der Unterschied zwischen ihnen?Was ist der Unterschied zwischen fest und unsicher
4
A
Antwort
16
Die feste Anweisung wird im Zusammenhang mit der unsafe modifier verwendet. Unsicher erklärt, dass Sie Zeigerarithmetik verwenden (zB: API-Aufruf auf niedriger Ebene), die außerhalb normaler C# -Operationen liegt. Die fixed-Anweisung wird verwendet, um den Speicher an Ort und Stelle zu sperren, damit der Garbage Collector ihn nicht neu zuordnet, während er noch verwendet wird. Sie können die feste Anweisung nicht außerhalb des unsicheren Kontexts verwenden.
Beispiel
public static void PointyMethod(char[] array)
{
unsafe
{
fixed (char *p = array)
{
for (int i=0; i<array.Length; i++)
{
System.Console.Write(*(p+i));
}
}
}
}
Wundert mich, warum es explizite Notwendigkeit angeben, dass der Codeblock/Verfahren unsicher ist, muss der Compiler es wissen, wann es die feste Aussage sieht. – arul
True, aber ich glaube, es kann nicht den Kontext, dh Methoden, Typ oder Code-Block schließen. Aber das ist nur eine Vermutung. – cgreeno
Der Compiler könnte die feste Anweisung automatisch mit der unsicheren Anweisung umbrechen, wenn sie einen Wert hat. Vielleicht gibt es noch andere Vorgänge unter der Haube des unsicheren Codes, die dazu führen könnten, dass generischer 'sicherer' Code langsam läuft, wer weiß. – arul