Gibt es irgendeinen Platz für die CLR ID zur Laufzeit für die aktuelle Anwendung? Ich überwache mein System mit Performance Monitoren und der Name der Instanz lautet:
%Vor% Ich kann alle anderen Parameter programmgesteuert abrufen, aber nicht die r15
, die die Laufzeit-ID der Common Language Runtime (Instanz) ist, die Ihren Code ausführt. Ich habe bemerkt, dass es immer 15 ist, aber es ist am besten, es dynamisch zu bekommen, um Komplikationen zu vermeiden.
Sie können das gesamte "Suffix" erhalten, d. h. den Teil nach Application.exe
, der dieselbe Infrastruktur verwendet wie das .NET-Framework (z. B. die Leistungsindikatoren).
Es gibt die Methode System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName , das kann das tun. Beachten Sie, dass die Methode wie folgt beschrieben wird: "Infrastruktur" und "Diese API unterstützt die .NET Framework-Infrastruktur und soll nicht direkt aus Ihrem Code verwendet werden.", Ist aber dennoch öffentlich. Ich denke nicht, dass es einen "besser unterstützten" Weg gibt, um die gewünschten Informationen zu bekommen. Zumindest ist es robuster und resistenter gegenüber zukünftigen Änderungen, und dann werden die Informationen basierend auf der Dokumentation zurückentwickelt.
%Vor% Dies gibt _p4472_r16_ad1
zurück, zum Beispiel.
Natürlich können Sie den Basisnamen des Leistungsindikators auch direkt übergeben, um den vollständigen Namen zu erhalten. Die Verwendung der obigen leeren Zeichenfolge ist nur ein Trick, um nur das "Suffix" zu erhalten.
%Vor% Die Klasse VersioningHelpers
hat auch die private Methode GetRuntimeId()
, aber angesichts des oben Gesagten ist es nicht notwendig, eine Reflektion zu verwenden, um das zu erreichen, was Sie brauchen.
Soweit ich sehen kann, gibt es keine Möglichkeit, vorherzusagen, was dieser Wert sein wird - hier ist ein Zitat von MSDN-Seite, die Sie verlinkt haben (Hervorhebung von mir)
runtimeID ist ein Common Language Runtime Identifier.
Der Artikel ist etwas verwirrend, da es ein Beispiel gibt, bei dem eine Anwendung myapp.exe
zwei CLR-Laufzeiten hostet. Im Beispiel scheinen die beiden Instanzen jedoch unterschiedliche Prozess-IDs und dieselbe CLR-Laufzeit-ID zu haben.
Der Artikel gibt jedoch definitiv keine Versprechungen darüber ab, was der Wert der CLR-Laufzeit-ID sein wird oder wie sie zu finden ist (es gibt nicht einmal an, dass es eine Nummer ist), was für mich bedeutet, dass es ein interner ist und du solltest dich nicht darauf verlassen, dass du herausfinden kannst, was es ist.
Mein Ansatz wäre wahrscheinlich, alle Perfmon-Leistungsindikatoren aufzuzählen und alle zu überwachen, die mit Ihrer PID übereinstimmen. Wenn es mehr als eins gibt (was passieren wird, wenn Sie .Net 2.0-Komponenten verwenden), müssen Sie nur beide überwachen.
Können Sie mehr Informationen darüber geben, was Sie versuchen zu tun?
Sie können es leicht finden, indem Sie die Zeichenfolge teilen, die Sie erhalten:
Diese Funktion teilt den Instanznamen und sucht nach dem einzigen Teil, der mit "r" beginnt und nicht mit ".exe" endet. Sobald der richtige Teil der Zeichenfolge gefunden wurde, lösche einfach den ersten Buchstaben "r" und behalte die Zahl, um sie in eine ganze Zahl umzuwandeln, und gebe sie zurück. Wenn die CLR-ID nicht gefunden wird, geben Sie einfach "-1" zurück, damit die Elternfunktion dies bemerkt.
%Vor%Ich hoffe, ich habe dir geholfen.