Laden...
T
ThomasR
myCSharp.de - Member
27
Themen
93
Beiträge
Letzte Aktivität
vor 12 Jahren
Dabei seit
28.10.2007
Erstellt vor 13 Jahren

Hallo,

ich bin relativ fit in C# und WindowsForms, jedoch ein kompletter Neuling in Webtechniken.

Ich würde gerne ein bestehendes recht komplexes Projekt auf eine Weboberfläche umstellen. Es geht um eine Software zur Bedienung von Industrieanlagen. Der Traum wäre es, dass dies in Zukunft über Webbrowser von beliebigen Geräten bedient werden kann.

Die bisherige Anwendung ist recht sauber in Model und View getrennt. Es wäre natürlich schön wenn die Modellklassen größtenteils 1:1 beibehalten werden könnten. Ich habe mal ein wenig gegoogelt, bin aber nicht sicher ob soetwas mit ASP.NET und AJAX realisierbar ist.

Die Windows-Form Oberfläche ist halt wirklich sehr dynamisch, es werden dort zur Laufzeit Forms erstellt, (per Plugin-Mechanismus generierte User)Controls darauf platziert, per Drag und Drop verschoben und und und...

Anhand der "Hallo Welt" Beispiele, die man so im Internet findet, wird mir nicht wirklich klar, ob und wie soetwas in ASP.NET machbar ist.
Da die Oberfläche zur Entwurfszeit praktisch noch leer ist, wäre der zugrundeliegende html-Code ja mehr oder weniger leer und müsste zur Laufzeit irgendwie generiert werden...?!?

Kann sich jemand vorstellen worum es geht und hat vielleicht einen Tipp ob das möglich ist bzw. ein Hinweis wie ich da rangehen könnte?

Grüße
Thomas

Erstellt vor 15 Jahren

Hallo,

vorneweg: Ich entwickle ein Program für Windows Mobile, d.h. Speicherbedarf und Performance sind sehr wichtig.

Folgendes:
Mein Program enthält einige kleine Grafiken, die an verschiedenen Stellen per GDI gezeichnet werden.

Bisher habe ich die Grafikendateien (.png) immer ganz einfach zur Resources.Resx hinzugefügt und im Program dann einfach direkt gezeichnet, also so
g.DrawImage(Resources.MyBitmap, ..., ...)

Nun habe ich festgestellt, dass diese Methode extrem langsam ist. In meinem Program muss diese Grafik oftmals häufig gezeichnet werden und auf diese Weise muss das Bitmap scheinbar erst jedes Mal aus der Resource geholt werden.

Ich habe festgestellt, dass es sehr viel schneller geht, wenn ich die Grafik in ein Bitmap Objekt lade und dann im weiteren Program immer nur das Bitmap zeichne. Also so:
Bitmap bmp = Resources.MyBitmap;
...
g.DrawImage(bmp, ..., ...)

So, durch das zusätzliche Bitmap Objekt habe ich aber natürlich jetzt einen höheren Speicherbedarf.

Meine Idee ist es nun, eine statische "BitmapPool" Klasse zu erstellen. Beim ersten Zugriff auf eine Grafik wird darin ein Bitmap Objekt aus der Resource erzeugt. Bei allen weiteren Zugriffen wird direkt das Bitmap Objekt zurückgegeben. Also so:


public static class BitmapPool
    {
        static Bitmap myBitmap;
        public static Bitmap MyBitmap
        {
            get
            {
                if (myBitmap == null)
                    myBitmap = Resources.MyBitmap;
                return myBitmap;
            }
        }

    }

Meine Frage ist nun: Ist das wirklich ein sinnvoller Ansatz oder gibt es da eine viel bessere/elegantere Lösung?

Gruß
Thomas

Erstellt vor 15 Jahren

Wow, super!
Vielen Dank.
Läuft es jetzt bei euch allen?

Thomas

Erstellt vor 15 Jahren

Ok, sorry habe nicht genau gelesen, hier die x86 Version.

Erstellt vor 15 Jahren

So, bitte nun mal die angehängte x64 kompilierte Version testen. Danke.

Grund dafür, dass eine dll vom CF referenziert ist ist der, das diese dll sowohl von einem PC Programm als auch von einem PocketPC Programm verwendet wird. Die dll enthält im Prinzip nur simple Klassen. Das funktioniert unter 32bit XP auch einwandfrei so.

Erstellt vor 15 Jahren

Ich wusste nicht, ob es nur 64bit betrifft. Jetzt weiß ich es, das ist ja schonmal ein Ansatz. Danke.

Das Projekt steht auf "Any CPU".
Vielleicht liegt es auch an dem Windows Mobile 6 Professional Class Library Projekt, welches referenziert wird?! Ist das vielleicht nicht 64bit kompatibel?

Erstellt vor 15 Jahren

@Fabian: Hast du die neue Version probiert oder die aus dem Anfangspost?
Schade. Jetzt habe ich keine wirkliche Idee mehr.

Könnte bitte mal jemand das Projekt im Visual Studio debuggen und nachschauen, wo diese Prozessoraulastung her kommt?

Ihr seit meine einzige Hilfe 🙂

Erstellt vor 15 Jahren

Ok, könnte bitte jemand die nun angehängte Version noch einmal unter Win7 testen?
Hat sich irgendetwas verändert?

Gruß
Thomas

Erstellt vor 15 Jahren

Ok danke schonmal.

Komisch finde ich halt, dass es unter XP läuft.

Naja, wäre echt super wenn mal jemand schauen könnte, wo er hängen bleibt. Habe das VS Projekt angehängt.

Kurz noch zu Erklärung:
Das Programm lädt Karten aus dem Internet. Bevor die Karte gezeichnet wird, werden die einzelnen Teilbilder zuerst asynchron (in einem eigenen Thread) in einen Cache geladen. Erst wenn das abgeschlossen ist, wird invalidate() aufgerufen.

Ich hoffe ihr kommt einigermaßen klar damit.

1000Dank
Thomas

Erstellt vor 15 Jahren

Hallo,

ich habe ein kleines Problem. Ich selbst habe kein Windows 7 sondern nur XP.

Nun berichten mir die Win7 (x64) User, mein Programm würde nicht unter Win7 laufen. Der Prozess startet aber das Userinterface wird nicht geladen. Leider habe ich keine Ahnung, woran das liegen könnte und kann es auch selbst nicht testen. Das Programm verwender .NET 3.5 und ausschließlich managed Code...

Ich habe das Programm mal angehängt, vielleicht könnte das jemand mit Win7 mal testen. Einfach entpacken und die .exe starten.

Gruß und Danke
Thomas