Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Nicht benötigte Methoden beim Kompilieren aus DLL entfernen
Cornflake
myCSharp.de - Member



Dabei seit:
Beiträge: 139
Herkunft: Bayern

Themenstarter:

Nicht benötigte Methoden beim Kompilieren aus DLL entfernen

beantworten | zitieren | melden

Hallo Leute

Bei meinen Projekten haben sich mit der Zeit nützliche immer wieder verwendete Methoden angesammelt. Diese liegen bei mir in einem DLL Hilfsmethoden-Projekt, dass ich bei anderen Projekten einbinde.
Natürlich brauche ich bei den Projekten nicht jede Hilfsmethode aus meinem DLL Hilfsmethoden-Projekt.

Daher die Frage: ?(
Kann beim Kompilieren nicht benötigter Code aus eingebundenen DLLs entfernt werden?
Oder kann ich anderweitig im Vorfeld per Script etc. aus einem Projekt nur die benötigten Methoden mit Zwischenverweisen extrahieren?

Grüße Cornflake
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Resharper kann das (in Teilen). Allerdings stellt sich die Frage, warum du eine vielseitige Bibliothek anlegst, wenn du sie dann nicht benutzen möchtest. Vielleicht mal deine Bibliotheken reorganisieren? :)

LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1868
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Glaube nicht, dass dies funktioniert.
Sonst würde man ja den Zweck der Klassenbibliothek entfremden.
Den gerade die Verteilung oft benötigtem Code ist ja gerade der Sinn davon.
Es stellt sich die Frage was du damit bezwecken willst.
Nur um ein paar kb Speicherplatz zu sparen, macht es kaum Sinn größeren Aufwand zu betreiben.

Ansonsten müsstest du diese nicht benötigten Funktionen wiederum in eine weitere DLL auslagern oder den Code selbst entfernen.
Aber alles was du in eine Klassenbibliothek packst, wird dann auch ohne Änderungen beim kompilieren dort reingeprest.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Davon abgesehen, dass das Null dem entspricht, wofür eine Klassenbibliothek gedacht ist, funktioniert das.
Aber: Visual Studio kann dies nicht von Haus aus (macht auch kein Sinn) und ReSharper kann das prinzipiell - aber ohne Beachtung von Reflection.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10076

beantworten | zitieren | melden

Xamarin macht das bei Android Programmen, speziell beim zusammenstellen der Apps mit der Runtime spart das schon einiges an speicher,

ABER das führt zu so vielen Problemen wenn man Reflection benutzt ( was aber bei fast jedem ORMapper nötig ist) das man das meist ausschaltet.
private Nachricht | Beiträge des Benutzers
Cornflake
myCSharp.de - Member



Dabei seit:
Beiträge: 139
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Hallo Leute
Danke für eure Antworten. Im Prinzip werde ich wohl das dann manuell anpassen.
Ich habe nur aktuell den Fall, dass ich eine SQLite Import Methode geschrieben hatte, die als Hilfmethode bei einigen Projekten zum Einsatz kommt, aber eben nicht bei allen. Jedenfalls benötigt dieser schnelle Import die SQLite.exe und die wird daher bei dem Hilfmethodenklasse mitgegeben und beim kompilieren auch in den Ausgabeordner kopiert. Nur für mein jetziges Projekt brauche ich diese z.B. nicht.

Werde daher vllt. nur diesen Part ändern, dass die SQLite.exe nicht immer mit in den Ausgabeordner kopiert wird, wenn nicht vorhanden.

Am besten wäre es wohl die Hilfsmethodenklasse so zu strukturieren, dass bestimmte Teile deaktiviert werden können. Habe nur keine Ahnung wie ich das am besten mache. Sollte ich eine Hilfmethoden Solution anlegen und da zu jedem Thema (Datenbanken, Controls, Dateihandling,...) ein eigenes Projekt anlegen, dann kommen zum Schluss x Dll Dateien raus und am liebsten wäre es mir eigentlich, wenn ich nur eine Dll habe (auch wenn intern bei der Programmierung gerne viele Klassen zur Strukturierung eingesetzt werden). Noch besser wäre es z.B., wenn nur die wirklich benötigten Hilfsmethoden mit in der exe Datei stehen, da ich die separat eigentlich nicht benötige.
Dass hätte für mich den Vorteil, dass ich zum Weitergeben des Programms nur die eine Exe benötige (und .NET Framework vorausgesetzt). Denn die Benutzer interessiert es nicht, wie toll ich Klassenbibliotheken verwende. Denen wäre einfach nur eine Datei kopieren am liebsten.

@FZelle: Ist das von Xamarin ein separates Tool, dass dies zusammenstellt?


Grüße Cornflake
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Cornflake am .
private Nachricht | Beiträge des Benutzers
p!lle
myCSharp.de - Member

Avatar #avatar-3556.jpg


Dabei seit:
Beiträge: 1053

beantworten | zitieren | melden

Ich würde die SQLite-Funktionalität in eine weitere Hilfs-DLL auslagern. Dann brauchst du sie nur da einbinden, wo du sie benötigst.

Und es gibt weiterhin Tools, die dir mehrere DLLs zusammenfassen können, was du dann schlussendlich haben möchtest...
EDIT: ILMerge
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von p!lle am .
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10076

beantworten | zitieren | melden

@Cornflake:
Nein, das ist in deren Linker eingebaut.

Aber wozu meinst du sqlite.exe zu benötigen?
Alles was damit gemacht werden kann, kann man auch mit System.Data.SQLite machen.
private Nachricht | Beiträge des Benutzers
Cornflake
myCSharp.de - Member



Dabei seit:
Beiträge: 139
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

@FZelle ok schade.

Naja wenn ich eine csv Tabelle importieren möchte, dann gibts den Importaufruf von sqlite.exe per Commandzeile.
sqlite> .mode csv
sqlite> .import C:/work/somedata.csv tab1

Diese Art des Imports ist bei sehr langen CSV Dateien wesentlich schneller, als bei anderen rein C# basierenden Aufrufen. Dazu wird aber die sqlite.exe benötigt.

Jedenfalls bei meinem aktuellen Projekt brauch ich den nicht, daher werde ich die Methode auskommentieren.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10076

beantworten | zitieren | melden

Zitat
Diese Art des Imports ist bei sehr langen CSV Dateien wesentlich schneller, als bei anderen rein C# basierenden Aufrufen. Dazu wird aber die sqlite.exe benötigt.
Das halte ich für ein Gerücht.
Das ist nur deswegen schneller weil du wahrscheinlich bei der manuellen Übernahme nicht richtig vorgehst.
Also transaction öffnen, parameter anlegen und in einem tighten loop die daten importieren.
http://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1868
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@Cornflake
Für dein BulkCopy brauchst du die sqlite.exe aber nicht.
Die Funktion dafür bietet dir die SQLite C# Lib schon.
Diese ist auch nicht wesentlich schneller/langsamer als die .exe Lösung.
Den beide laufen am Ende über den selben Code.

Die Frage ist nur, wie deine alte Import Lösung aussah.
Ggf. war diese einfach nicht sauber umgesetzt und hat sich deshalb selbst ausgebremst.
Oder hast du ungeprüft einfach irgendwo gelesen, dass die exe Lösung schneller sein?

Hilf Link:
http://procbits.com/2009/09/08/sqlite-bulk-insert

Bei Sqlite solltest du wenn möglich bei Insert, Update, Delete und co. auf Transaktionen setzen.
Diese beschleunigen in den meisten Fällen die Verarbeitung enorm.
Entsprechende Beispiele und Benchmarks findest du auch bei Google zu hauf.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Naja, das kommt drauf an. Auch postgreSQL (und Oracle?) können über CSV wesentlich schneller importieren.
Würde mich nicht wundern, wenn das bei SQlite ebenso so wäre. COPY läuft auch intern anders ab.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Cornflake
myCSharp.de - Member



Dabei seit:
Beiträge: 139
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Hi

Thx für eure Antworten.
Habe leider nicht mehr die Seite gefunden, bei der dieser Geschwindigkeitsvergleich vorgenommen wurde. Bin mir aber sicher das dort stand, dass per sqlite3.exe der Import wesentlich schneller als der Import per C# sein soll.
Vllt ist das inzwischen auch anders.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Ich bin mir sicher, dass sich das nicht auf einen INSERT-Befehl bezieht....
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10076

beantworten | zitieren | melden

Wie ich das INet kenne, war das jemand der ohne Transactions und mit ständig neuen Commands gearbeitet hat.
private Nachricht | Beiträge des Benutzers
filmee24
myCSharp.de - Member



Dabei seit:
Beiträge: 57

beantworten | zitieren | melden

schau dir mal Fody an, aber da musst du dir diesen Fall selbst schreiben
C. Anders
private Nachricht | Beiträge des Benutzers