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

  • »
  • Community
  • |
  • Diskussionsforum
In Applikation alternativ 32-bit oder 64-bit DLL verwenden
oehrle
myCSharp.de - Member



Dabei seit:
Beiträge: 396
Herkunft: Germany

Themenstarter:

In Applikation alternativ 32-bit oder 64-bit DLL verwenden

beantworten | zitieren | melden


Hallo Community, sorry, bestimmt gibt es dazu schon einen Eintrag im Forum, habe aber mit der Suche keine Treffer finden können.
Kann man eigentlich mit Jokerzeichen suchen lassen? Jetzt aber zum eigentlichen Thema.

Ich habe eine Applikation, die wurde um einen Dokumentenansicht erweitert. Und zwar wird da eine externes System angezapft, dass mir dann die Dokumente per Filetransfer liefert.

Nun ist es so das ich dazu eine DLL bekommen habe, die mit 32-Bit Architektur erstellt ist.
Meine Applikation war auf ANY-CPU eingestellt, das heißt ja das diese selbständig bei der Installation für 64- oder 32-Bitsystem entschieden wird.
Nun habe ich die Applikation komplett auf Zielplattform 32-Bit gestellt.

Nun habe ich den Eindruck, dass die Appliaktion nun öfters abschmiert, weil diese Appliaktion sehr viele Daten vom SQL-Server saugt, unsere CAD-Programmierer mit ihren Tools auch schon viel Arbeitsspeicher brauchen und so die Ressourcen knapp werden.

Dazu kommt, dass diese Appliaktion auch noch auf WINXP laufen soll, damit haben wir noch ausgerüstete Maschinen, auf denen die Applikation läuft (da halt mit 32-Bit, deshalb waren alle eingebundenen Projekte der Applikation mit Zielplattform AnyCPU eingestellt).

Diese ganze Applikation verteile ich per ClickOnce.

Nun meine Frage, gibt es eineMöglichkeit wie ich das steuern kann ob die DLL mit 32-Bit oder 64-Bit verwendet werden soll, und das ganze weiterhin als eine einzige Appliaktion mit ClickOnce zu verteilen?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15981

beantworten | zitieren | melden

Zitat von oehrle
Meine Applikation war auf ANY-CPU eingestellt, das heißt ja das diese selbständig bei der Installation für 64- oder 32-Bitsystem entschieden wird.
Nein heisst es nicht.
Die Entscheidung wird auf Prozess-Ebene getroffen, nicht bei der Installation.

Siehe meine Antwort vom 6. Juli in Softwareversion (aus Registry) wird im Release-Modus erkannt, im Debug-Modus nicht
Zitat von oehrle
Nun meine Frage, gibt es eineMöglichkeit wie ich das steuern kann ob die DLL mit 32-Bit oder 64-Bit verwendet werden soll, und das ganze weiterhin als eine einzige Appliaktion mit ClickOnce zu verteilen?
Du selbst kannst Das nur über die Compiler Optionen steuern (siehe auch Doku).
Im Prozess kannst Du das selbst nicht mehr ändern, weil zu diesem Zeitpunkt der Prozess schon geladen wurde.

Zumindest früher gab es Tools Exe-Dateien nachträglich entsprechend zu patche (CorFlags); aber zur Laufzeit geht das nicht (gilt aber IIRC nur für .NET Framework Dateien!).
Auch war es zumindest bei .NET Framework Anwendung möglich die jeweilige Anwendung über eine x64 bzw x86 Konsolen-Instanz zu starten, um eine AnyCPU-Anwendung mit der jeweiligen Bitness zu forcen.
- performance is a feature -

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

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7548
Herkunft: Waidring

beantworten | zitieren | melden

Hallo oehrle,
Zitat
das ich dazu eine DLL bekommen habe, die mit 32-Bit Architektur erstellt ist
Eine .NET DLL od. eine native DLL?
Zitat
Nun habe ich den Eindruck, dass die Appliaktion nun öfters abschmiert, ... viel Arbeitsspeicher
Hast du dazu eine Fehlermeldung od. einen Eintrag in der Windows-Ereignisanzeige?
32bit Anwendungen / Prozesse können auf weniger Arbeitsspeicher (korrekter: virtuellen Speicher) zugreifen als 64bit Prozesse, aber ich glaube eher nicht dass dies das Problem ist. Falls doch solltest du OutOfMemoryExceptions sehen -- die aber nicht zwangsläufig mit zu wenig Speicher zu tun haben müssen (sondern ein paar andere Gründe haben können wie hauptsächlich dass der GC keinen Platz findet um das Objekt der gewünschten Größe zu alloziieren).

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
jogibear9988
myCSharp.de - Member



Dabei seit:
Beiträge: 587
Herkunft: Offenau

beantworten | zitieren | melden

Ich habs damals so gemacht: https://github.com/dotnetprojects/DotNetSiemensPLCToolBoxLibrary/blob/321dbe242911892a3dde3db2d9a7c482f468737a/LibNoDaveConnectionLibrary/Communication/LibNoDave/libnodave.net.cs#L185
cSharp Projekte : https://github.com/jogibear9988
private Nachricht | Beiträge des Benutzers
oehrle
myCSharp.de - Member



Dabei seit:
Beiträge: 396
Herkunft: Germany

Themenstarter:

beantworten | zitieren | melden

Hallo Abt, danke für die Info. Der Beitrag liegt schon etwas zurück, aber habe mich erst heute damit beschäftigt.
Also, wenn ich das richtig verstehe, dann muss ich die Applikation jeweils wür 32-Bit-Systeme und für 64-Bit-Systeme erstellen.
Die Anwender müssen dann entscheiden, was sie installieren (je nach Windows-Version, bei uns gibt es noch XP ;-)

In der Applikation kann ich nicht entscheiden, welche DLL geladen werden soll? Sonst könnte man ja bestimmt die Architektur abfragen?

Ja, gfoidl meint ja das etwas mit dem GC nicht stimmt. OutofMemory-Ex ist schon aufgetreten. Ich denke da wo das hauptsächlich passiert, die nutzen noch eine andere RAM-lüsterne Applikation da diese auch Simulationen durchführt, und diese ist als 32-Bit aktiv.
Wie kann ich das nachsehen, im Taskmanager, sehen was sich die Appliaktionen an RAM greifen?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15981

beantworten | zitieren | melden

Zitat von oehrle
Also, wenn ich das richtig verstehe, dann muss ich die Applikation jeweils wür 32-Bit-Systeme und für 64-Bit-Systeme erstellen.
Jo, wie das seit vielen vielen Jahren bei vielen vielen Anwendungen der Standard-Fall ist und nach und nach nur noch 64 Bit Anwendungen gibt.
Zitat von oehrle
In der Applikation kann ich nicht entscheiden, welche DLL geladen werden soll? Sonst könnte man ja bestimmt die Architektur abfragen?
Siehe oben: Nein, nicht mehr wenn die Anwendung schon gestartet ist.
Zitat von oehrle
Wie kann ich das nachsehen, im Taskmanager, sehen was sich die Appliaktionen an RAM greifen?
Einfach Task Manager öffnen und die RAM-Reservierungen anschauen...?
- performance is a feature -

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