Ich habe Tutorials aus dem Internet über C # -Attribute und Metadaten gelesen. Es ist sehr cool, aber ich frage mich, was es bedeutet.
Werden (benutzerdefinierte) Attribute geladen, wenn die Assembly geladen wird? oder ist es nur, wenn Sie Reflektion verwenden, um die Metadaten abzurufen?
Es scheint, dass die Attribute zur Gesamtgröße des Codes beitragen, weil es in die ausführbare Datei kompiliert wird? Ist das richtig?
Ist es möglich, Kompilierzeitattribute zu haben? I.e. Attribute werden nur angewendet, wenn DEBUG definiert ist?
Ich weiß, dass man so etwas tun soll:
%Vor%Aber ich frage mich, ob es einen besseren Weg gibt?
Danke!
-Stephanus
Es gibt zwei Teile für Attribute, ihren Code und ihr Konstruktorargument und ihre Eigenschaftsdaten. Der Code wird in der AWL der Baugruppe gespeichert, die Daten werden in den Baugruppenmetadaten gespeichert. Wenn ein Attribut nicht verwendet wird, benötigt es nur wenig virtuellen Speicherplatz, benötigt jedoch keine Maschinenressourcen.
Nichts passiert, bis Sie die GetCustomAttributes () -Methode verwenden. Dann wird der Code für die Attributklasse genau wie der reguläre Code in Ihrer Assembly just-in-time kompiliert. Und der Konstruktor und die Eigenschaften-Setter werden unter Verwendung der Attributdaten in den Metadaten aufgerufen. Sie benötigen etwas RAM für beide, wenn der Speichermanager die IL, den Maschinencode und die Metadatenseiten abbildet.
1) AFAIK-Attribute werden instanziiert, aber sie kommen mit der Assembly in den Speicher.
2) Nicht annähernd genug um sich Sorgen zu machen. Knuth, etc.
3) Ja.
Die Verwendung von Attributen bedeutet die Verwendung von Reflektion, die zu den langsamsten Dingen zählt, die Sie im Framework ausführen können. Aber ist es dann zu langsam für Ihre Anwendung? Ohne zu wissen, was Sie tun, geschweige denn was Sie innerhalb von wie vielen Millisekunden tun müssen, kann Ihnen niemand eine Ja oder Nein Antwort geben.
Am besten ist es, einen Prototyp aufzureißen und zu sehen, wie es mit IRL aussieht. Wieder Knuth, usw.
Tags und Links c# attributes performance xna metadata