Volatile ist ein Hinweis für den Compiler (und ngen/JIT-Compiler), dass der Wert dieser Variablen sich jederzeit ändern kann, und somit Optimierungen rund um die Variable zugreift, indem der Wert lokal volatile Cachen deaktiviert .
Betrachten wir den folgenden Code:
If (UserName == "")
// do something
If (UserName == "Fred")
// do something
Wenn flüchtige nicht vorhanden war, könnte der Compiler IL erzeugen, wo sie die Referenz auf dem Stapel für den ersten Vergleich speichert und als Wiederverwendungsmöglichkeiten für die zweite. Das Hinzufügen von volatile teilt dem Compiler jedoch mit, dass die Referenz möglicherweise von einem anderen Thread geändert wird, wodurch er gezwungen wird, eine IL zu generieren, die die Stack-Kopie nicht aus dem ersten Vergleich wiederverwendet.
gut, das war so eine großartige Erklärung. (Y) –
@Shimmy: Sie sind perfekt in der Lage, die Spezifikation ohne meine Hilfe zu finden. –
Aber nicht Spezifikation 10.5.3 :) – Shimmy