Große C # -Quelldatei mit Windows-API-Methodensignaturen, -Strukturen, -Konstanten: Werden sie alle in der endgültigen .exe-Datei enthalten sein?

8

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%
  1. 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)?

  2. 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%
  3. Was ist mit Konstanten Deklarationen oder Readonly-Mitgliedern wie:

    %Vor%
Alex Vang 30.11.2010, 14:37
quelle

4 Antworten

2

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.

    
Joel Coehoorn 30.11.2010, 16:02
quelle
4

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.

    
Hans Passant 30.11.2010 16:32
quelle
2

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%
    
MichaelMocko 30.11.2010 14:45
quelle
1
  

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.

    
ILya 30.11.2010 14:44
quelle

Tags und Links