Performance - wie ist der aktuelle Stand?



  • Hallo zusammen,

    eines Vorweg: Es geht ausschließlich um Visual Studio/Windows

    ich möchte eigentlich keine "was ist besser" Diskussion im Detail starten. Wenn es "unklar" sein sollte, dann sollten wir das so benennen und dann akzeptiere ich das. Die Frage ist, ob es "unklar" ist! Ich habe jetzt ca. 1-2 Jahre C# entwickelt und das zum Teil mit WinForms und jetzt auch mit WPF. Ich persönlich muss sagen, dass ich von der Performance von WPF total enttäuscht bin! Das ist alles total langsam. Hinzu kommt das Mapping von NHibernate, welches Queries erzeugt, die 10 Seiten lang sind (was ja auch nicht unbedingt performance-freundlich ist).

    Jetzt wollen wir ein neues App starten und da es durchaus performance-kritisch sein kann sind wir wirklich am überlegen, den Projekttyp zu wechseln.

    Hier wäre mal meine Frage, wie so der Stand ist. In C# kann man ja WPF und WinForma-Programme machen. In C++ kann man MFC-Programme schreiben. Ist MFC denn überhaupt noch aktuell? Wie sieht die Zukunft aus, wenn man mit Visual Studio schnelle Programme schreiben will??

    Gruß
    Fresh



  • Hallo,

    die Frage läßt sich nur dann beantworten, wenn man genau die Anforderungen an das Projekt kennt, d.h. welcher Projekttyp verlangt wird (C/S oder lokal, Webanwendung, Cloud, ...) und welche Infrastruktur bedient werden muß (Datenbank, Netzwerk, Online-Ressourcen).

    Wenn du ausschließlich auf Performance aus bist, dann wirst du wohl an jedem Rädchen drehen müssen (egal welche Programmiersprache du verwendest).

    Für C++ würde ich aber auf jeden Fall Qt 4.x verwenden (anstatt MFC).
    Und bei C# kommt es darauf an, ob ihr wirklich WPF unbedingt benötigt.

    Und statt NHibernate gibt es ja auch noch andere ORMs (EF, LINQ-to-SQL, etc.) bzw. Micro-ORMs (Dapper.NET, Massive, PetaPoco, ...)

    Evtl. könntet ihr ja auch ein Mischprojekt machen, d.h. performancekritische Teile nativ aufsetzen.



  • C++ soll ja die Englische Küche unter den Programmiersprachen sein.



  • rooxxan schrieb:

    C++ soll ja die Englische Küche unter den Programmiersprachen sein.

    Sehe ich nicht.
    http://www.c-plusplus.net/forum/p2130807?highlight=k�che#2130807



  • volkard schrieb:

    rooxxan schrieb:

    <trollpost>

    <fütterpost>

    Nicht doch 😉



  • Fresh0razoR schrieb:

    Hinzu kommt das Mapping von NHibernate, welches Queries erzeugt, die 10 Seiten lang sind (was ja auch nicht unbedingt performance-freundlich ist).

    nHibernate kann man schon gut feintunen. Es tut im wesentlichen das, was man von ihm verlangt. Und wenn man LazyLoading nicht anwendet, kann es schnell passieren, dass man auf einen Schlag die ganze Datenbank einliest. Genauso problematisch bei der falschen Fetching- oder Cascading-Strategie. Immer schön K.I.S.S. beachten bei einem ORM und lieber dreimal überlegen, ob man Klassenhierarchien wirklich benötigt, oder ob es "Components" auch tun.

    Es ist zugegebenermaßen komplex aber der Zugewinn ist die initiale Denkarbeit wert.

    Von WPF habe ich null Ahnung. Schiebe ich seit geraumer Zeit vor mir her weil ich der Sache nicht traue.

    Winforms ist hässlich aber nicht langsam. Imo 🙂



  • Fresh0razoR schrieb:

    Ich habe jetzt ca. 1-2 Jahre C# entwickelt und das zum Teil mit WinForms und jetzt auch mit WPF. Ich persönlich muss sagen, dass ich von der Performance von WPF total enttäuscht bin!

    Wobei man bei WPF vieles verkehrt machen kann, und das Thema Performance in Kombination mit WPF einige interessante Artikel im Internet zu Tage fördert (Die Aufzeigen wie man einige Fallstricke umschifft...).



  • Th69 schrieb:

    Hallo,

    Für C++ würde ich aber auf jeden Fall Qt 4.x verwenden (anstatt MFC).
    Und bei C# kommt es darauf an, ob ihr wirklich WPF unbedingt benötigt.

    Im Falle Linux schon, wenn es um MS Aps geht und Performance ist Win APi gefolgt von MFC und dann VCL die besten Wahl.

    Qt nutz keine Native Widgets und wie auch bei allen anderen Plattformunabhängigen Frameworks z.B. WX werden weder Message Maps noch RPC´s verwendet. Sämtliche IPC läuft wie bei Linux über Sockets usw. Das ist wie dot.net für C++ total aufgebläht.

    Wenn es um ein größeres Projekt, mit einer langen ttl, geht, würde ich da derzeit auch keine Entscheidung treffen. Abwarten was mit Windows 8 passiert, was ich bisher an Beispielen in C++ gesehen habe sieht alles wie CLI aus. Totgesagte leben halt länger.



  • Jetzt wollen wir ein neues App starten und da es durchaus performance-kritisch sein kann sind wir wirklich am überlegen, den Projekttyp zu wechseln.

    Wenn Performanceprobleme so einfach zu loesen waeren ...



  • du kannst bei c# bleiben um das interface usw. zu machen, dagegen ist echt nichts zu sagen (man muss schon was falsch machen um bei UI limitiert zu sein was performance angeht 😉 ). fuer performance kritische bereiche kannst du dann c++ kapseln oder das ganze backend in c++ schreiben.



  • Zooonk schrieb:

    Th69 schrieb:

    Hallo,

    Für C++ würde ich aber auf jeden Fall Qt 4.x verwenden (anstatt MFC).
    Und bei C# kommt es darauf an, ob ihr wirklich WPF unbedingt benötigt.

    Im Falle Linux schon, wenn es um MS Aps geht und Performance ist Win APi gefolgt von MFC und dann VCL die besten Wahl.

    Qt nutz keine Native Widgets und wie auch bei allen anderen Plattformunabhängigen Frameworks z.B. WX werden weder Message Maps noch RPC´s verwendet. Sämtliche IPC läuft wie bei Linux über Sockets usw. Das ist wie dot.net für C++ total aufgebläht.

    Wenn es um ein größeres Projekt, mit einer langen ttl, geht, würde ich da derzeit auch keine Entscheidung treffen. Abwarten was mit Windows 8 passiert, was ich bisher an Beispielen in C++ gesehen habe sieht alles wie CLI aus. Totgesagte leben halt länger.

    LOL.



  • Der Unterschied bei WPF zwischen grossartiger Performance und mieserablem Geruckel liegt meistens in den Details versteckt. Ein paar falsche Bindings können die ganze Applikation unbrauchbar machen. Das ist eine Erfahrung, welche ich leider schon einige Male machen musste.

    Was den Rest betrifft: Auch bei fetten Datenbank-Applikationen bei denen ich mit extrem vielen Bindings und ohne Lazy-Loading gearbeitet habe, ist die Bedienung akzeptabel schnell. Besser geht es fast immer, aber hast du schon mal mit Java + Swing gearbeitet? 😉

    Ich bin froh, dass es so läuft. Auf der anderen Seite habe ich alle Tests immer mit mindestens 6 GB RAM, i7 und guter Grafikkarte gemacht.


Log in to reply