Hallo zusammen!
Mein Programm ist inzwischen sehr groß geworden und ich habe festgestellt, dass es auf manchen Rechnern (die durchaus Dual Core haben) teilweise extrem lange dauert (bis zu 30 Sekunden), bis das Programm von der IL in Maschinencode übersetzt wurde und ausgeführt werden kann. Da ich das Programm jedoch gerne weiterhin OHNE setup-file verteilen möchte (d.h. ngen kommt nicht in frage) suche ich nach einer Alternative, die Wartezeit zu verkürzen oder zumindest zu überbrücken.
Gibt es evtl. eine Möglichkeit, einen Splashscreen anzeigen zu lassen, WÄHREND die JIT-Kompilierung läuft? Danach nützt er mir nix mehr, weil das Programm selbst nicht viel laden muss beim Start. Es geht eher darum, mit dem Splash-Screen die JIT-Kompilierung zu überbrücken...
Danke & Grüße
XD
Seite 1 von 1
Splash-Screen in C# während der jit kompilierung
Anzeige
#2
geschrieben 15. Februar 2011 - 16:45
Hallo XDestroy,
schau dir mal folgenden Splashscreen auf Codeproject an:
Codeproject
Verwende den auch in einem Projekt und ist super einfach zu verwenden!
Viele Grüße
Campy
schau dir mal folgenden Splashscreen auf Codeproject an:
Codeproject
Verwende den auch in einem Projekt und ist super einfach zu verwenden!
Viele Grüße
Campy
#3 _MagicAndre1981_
geschrieben 15. Februar 2011 - 19:57
um NGEN wirst du nicht herum kommen
#4
geschrieben 16. Februar 2011 - 16:10
Überlegung:
Den Splash-Screen in ein eigenes Programm (also eine eigene .exe) auslagern; Diese .exe ist ja dann sehr kompakt und braucht nicht lange für die JIT-Kompilierung -> Wird also schnell angezeigt.
Wenn die "eigentliche" Programm-exe dann läuft, muss die halt den Splashscreen beenden.
Viele Grüße,
Анди
Den Splash-Screen in ein eigenes Programm (also eine eigene .exe) auslagern; Diese .exe ist ja dann sehr kompakt und braucht nicht lange für die JIT-Kompilierung -> Wird also schnell angezeigt.
Wenn die "eigentliche" Programm-exe dann läuft, muss die halt den Splashscreen beenden.
Viele Grüße,
Анди
Laptop: HP EliteBook 8560p; Core i7-2720QM, 16 GB DDR3 1333, 500 GB HDD, Intel HD Graphics 3000, Win 7 x64 SP1 Build 7601.17514
Internetzugang: T-Home VDSL 50 @ 51392 kbit/s down, 10048 kbit/s up || Router: FritzBox 7360 @ FW 111.05.24
Internetzugang: T-Home VDSL 50 @ 51392 kbit/s down, 10048 kbit/s up || Router: FritzBox 7360 @ FW 111.05.24
#5
geschrieben 16. Februar 2011 - 17:18
und die "kleine exe" soll die große öffnen, oder? sowas in der richtung hatte ich auch überlegt
#6
geschrieben 17. Februar 2011 - 10:10
Zitat (XDestroy: 16.02.2011, 17:18)
und die "kleine exe" soll die große öffnen, oder?
Ja, so hatte ich mir das gedacht. Die "kleine Splash-exe" muss sich dann automatisch beenden, wenn die "große" läuft (oder die "richtige exe" beendet die "Splash-exe").
Laptop: HP EliteBook 8560p; Core i7-2720QM, 16 GB DDR3 1333, 500 GB HDD, Intel HD Graphics 3000, Win 7 x64 SP1 Build 7601.17514
Internetzugang: T-Home VDSL 50 @ 51392 kbit/s down, 10048 kbit/s up || Router: FritzBox 7360 @ FW 111.05.24
Internetzugang: T-Home VDSL 50 @ 51392 kbit/s down, 10048 kbit/s up || Router: FritzBox 7360 @ FW 111.05.24
#7
geschrieben 17. Februar 2011 - 11:09
ja ich hab überlegt, die kleine exe native zu machen. aber das ist irgendwie schon ne unsaubere lösung. aber gut. wär eine möglichkeit.
#8 _MagicAndre1981_
geschrieben 17. Februar 2011 - 15:51
warum kein NGEN? Damit minimierst du auch die Speichernutzung.
#9
geschrieben 26. Mai 2011 - 20:11
Splashscreen als exe und die ursprüngliche exe als dll, die du dann lädst sollte gut gehen.
#10
geschrieben 08. Juli 2011 - 19:23
Meiner Meinung nach ist ein Splash-Screen in einer .NET-Sprache ein Paradoxon:
Ein Splash-Screen wird gebraucht, weil man dem Benutzer während des Ladens, Startens und Initialisierens informieren will, dass was passiert.
Da eine managed Anwendung jedoch immer erst mal in die CLR geladen werden muss, dauert das schon lange, egal ob NGEN oder ned.
Meine Lösung sieht grob so aus:
1.) Ein Mini-Native-C++-Programm wird gestartet
2.) C++-Programm zeigt Topmost Fenster mit Splash-Screen-Bild an
3.) C++-Programm startet .NET-Programm
4.) .NET-Programm lädt, initialisert und sagt dann via IPC dem C++-Programm, dass es sich beenden soll.
Normalerweise ernte ich keinen Applaus, wenn ich das so erzähle, in der Praxis funktioniert das saugut
Ein Splash-Screen wird gebraucht, weil man dem Benutzer während des Ladens, Startens und Initialisierens informieren will, dass was passiert.
Da eine managed Anwendung jedoch immer erst mal in die CLR geladen werden muss, dauert das schon lange, egal ob NGEN oder ned.
Meine Lösung sieht grob so aus:
1.) Ein Mini-Native-C++-Programm wird gestartet
2.) C++-Programm zeigt Topmost Fenster mit Splash-Screen-Bild an
3.) C++-Programm startet .NET-Programm
4.) .NET-Programm lädt, initialisert und sagt dann via IPC dem C++-Programm, dass es sich beenden soll.
Normalerweise ernte ich keinen Applaus, wenn ich das so erzähle, in der Praxis funktioniert das saugut
Dieser Beitrag wurde von UweKeim bearbeitet: 08. Juli 2011 - 19:23
#11 _der dom_
geschrieben 22. Juli 2011 - 22:12
Der Splash ist doch kein Akt.
du legst dir eine Form an und setzt die Controlbox auf False.
Dann ziehst du ein Panel oder ähnliches auf das Control und setzt einen Timer o.ä.
Wenn vom Timer die Zeit abgelaufen ist, dann sagst du, dass die Form sich als "hide" setzen soll.
Beim Beenden des Hauptprogramms sagst du dann "Environment.Exit(0)" und fertig.
So hab ich das mit meinem LogOn Screen gemacht. Und ja sowas funktioniert in der Tat.
Ich muss mal schauen ob ich da auf die schnelle ein Beispielprojekt hinbekomme
du legst dir eine Form an und setzt die Controlbox auf False.
Dann ziehst du ein Panel oder ähnliches auf das Control und setzt einen Timer o.ä.
Wenn vom Timer die Zeit abgelaufen ist, dann sagst du, dass die Form sich als "hide" setzen soll.
Beim Beenden des Hauptprogramms sagst du dann "Environment.Exit(0)" und fertig.
So hab ich das mit meinem LogOn Screen gemacht. Und ja sowas funktioniert in der Tat.
Ich muss mal schauen ob ich da auf die schnelle ein Beispielprojekt hinbekomme
#12 _nobido_
geschrieben 23. Juli 2011 - 11:36
Zitat (der dom: 22. Juli 2011 - 22:12)
Der Splash ist doch kein Akt.
Schaut mir nach einem Fall von 'nicht richtig gelesen' aus.
Der Splash soll ja das lange JIT-kompilieren überbrücken.
Und solong das kompilieren, initialisieren etc. der Anwendung nicht abgeschlossen ist gibt's eben auch keinen splash
greetz
#13
geschrieben 23. Juli 2011 - 15:09
naja aber wenn der splash auch auf .net basiert, dann ist doch nichts gewonnen! es geht ja um die zeit die die clr braucht um in die gänge zu kommen. das dauert auf älteren geräten schon mal eine weile!
- ← [.Net] in anderen Benutzerkontext wechseln
- Programmierung
- cmd > start programm, mehrere Programme →
Thema verteilen:
Seite 1 von 1