Ich möchte alle Signaturen von Windows-API-Funktionen, die ich in Programmen in einer Klasse verwende, wie WinAPI, und in eine Datei WinAPI.cs, die ich in meine Projekte aufnehmen werde. Die Klasse wird internal static und die Methoden public static extern sein. (Etwas wie die große NativeMethods.cs aus dem .NET Framework-Quellcode).
Nehmen wir an, WinAPI.cs hat einhundert native Methoden-Signaturen wie:
%Vor%Wenn ich nur ein paar von ihnen in einem Projekt verwenden möchte (auch nur ein oder zwei), wenn ich die WinAPI.cs-Datei in mein Projekt einfüge, wird die letzte .exe mit dem unnötigen gefüllt Methodendeklarationen verwende ich nicht (die anderen 99 oder so)?
Was ist mit nativen Strukturdeklarationen? Wenn ich sie nicht im aktuellen Projekt verwende, werden sie immer noch in der endgültigen .exe enthalten sein?
%Vor%Was ist mit Konstanten Deklarationen oder Readonly-Mitgliedern wie:
%Vor%Alle davon werden eingeschlossen. Es wird jedoch als IL enthalten sein und wenn das Programm ausgeführt wird, ist es nur kompilierter Maschinencode. Wir sprechen höchstens 40K Speicherplatz.
Schwitz nicht die kleinen Sachen hier. Dies sind nur Deklarationen, es gibt keine IL für sie in der Endmontage. Sie brauchen nur etwas Platz in den Metadaten. Die Chancen sind sehr hoch, dass sie nicht einmal aus der Assembly geladen werden, besonders wenn Sie die Deklarationen zusammenhalten. Metadaten werden immer nur in den RAM geladen, wenn sie verwendet werden, 4096 Bytes gleichzeitig.
Übrigens möchten Sie explizit readonly für diese Konstanten-Deklarationen nicht verwenden. Jetzt macht sie dazu gebracht, Platz zu nehmen, auch wenn sie nicht benutzt werden. Einer der wenigen Fälle, in denen eine öffentliche Const eine gute Idee ist. Dies sind manifeste Konstanten, deren Wert sich niemals ändert. Wie Math.PI.
Alle Elemente, die Sie angegeben haben, werden in die Endmontage einbezogen. Die einzige Möglichkeit, sie aus der endgültigen EXE-Datei zu entfernen, ist die Verwendung von Precompilations-Anweisungen. Zum Beispiel:
%Vor%// unbenutzte Methoden hier
%Vor%
Wenn ich nur ein paar davon benutze in einem Projekt (sogar ein oder zwei), wenn ich Fügen Sie die Datei WinAPI.cs in meine Datei ein Projekt, wird das finale .exe gefüllt mit der unnötigen Methode Deklarationen, die ich nicht verwende (die anderen 99 oder so)?
Ja, der gesamte Code in Ihrem Projekt wird in Ihre Assembly kompiliert;
Was ist mit der nativen Struktur? Deklarationen, wenn ich sie nicht benutze das aktuelle Projekt, werden sie noch in der endgültigen .exe enthalten sein?
Ja. Sie werden auch enthalten sein.
%Vor%
Ja. Sie werden auch enthalten sein.