Python vs. C#.NET: Nur meine Meinung
Zu aller erst, dies ist weder ein Performancetest, noch ein Vergleich was denn nun auf welche Art besser/schlechter ist. Es ist nur meine Meinung bei einem Projekt, welches ich einmal in C# und einmal in Python entwickelt habe. Zielplattform war ausschließlich WIndows. Daher wird die Portabilität bei beiden Anwendungen als pro/konta nicht aktzeptiert.
Zuersteinmal die Eckdaten:
- Datenbank: Microsoft Access 2.0
- Übertragung per SFTP
- SFTP mit Keyfile
- Logging der Anwendung
- App sollte ausschließlich im Systemtray laufen
- Lauffähig ab Windows 2000
Benötigt für C# .NET
- IDE: Visual Studio Express oder Visual Studio 2008
- Windows
- .NET 2.0 da alles dadrüber nicht mehr unter Windows 2000 läuft
- SharpSSH Library
- Log4NET Library
- Aktuellen NET 2.0 JET 4.0 Treiber
Benötigt für Python
- Texteditor oder IDLE oder Komodo Edit
- Windows (Kann überall erstellt werden)
- Paramiko Lib
- pyodbc Lib
Die Erfahrungen:
Zuerst war ich von .NET wirklich begeistert. Ich habe mich gleich in die OpenBooks gestürzt und mich eingelesen. Ich habe für fast alle Abfragearten Funktionen gebaut die das Ergebnis zurücklieferten. Die Datei wurde geschrieben, der Key ausgelesen und das ganze per SFTP auf den Server übertragen. Auch das logging klappte prima. Doch die ersten zweifel machten sich breit, als ich sah wieviel RAM alleine die Anwendung im IDLE-Zustand verschlang. Es waren über 37 MB. Die 100% CPU Leistung wären der Abfragen und dem zusammenzimmern der Datei lasse ich mir ja noch gefallen. Da es eh nur ein paar Sekunden sind. Allerdings futterte die Anwendung genüßlich hier und da nen MB RAM in sich hinein.
Ende: ca. 40 MB Ramverbrauch, für .NET & JET geschätzt 120 MB Festplattenplatz. Zeilen ca: 450. Ausgabegröße: 1 MB inkl. Dlls. Nur x32 kompatibel. x64 mit der Express Version konnte nicht erstellt werden.
Nun nahm ich auf Drängen von anderen Python. Mit war zuerst diese Sprache etwas suspekt. Es gab keine Klammern sondern es wurde per TAB eingerückt. Nunja die ersten Probleme traten früh auf, ich hab vergessen die Tab-Taste zu drücken! Ich habe versucht in Etwa die selbe Struktur wie in .NET zu verwenden um es einigermaßen mit der .NET Anwendung vergleichen zu können. Allein aber der Code für das Kontextmenü des Tray Icons war ca. 50% (ehr mehr %) weniger als in .NET. Selbstverstänlich habe ich mir den SFTP Support von außen über die Paramiko Lib geholt. In der Ausführung lag die Anwendung in Etwa bei 4-5 MB RAM, jedoch auch bei 100% CPU Last, was ja bei beiden OK ist. Alleridngs war die Pythonanwendung wesentlich schneller “fertig” mit dem Auslesen der Daten. Ob das nun drann liegt das ich per pyODBC auf die DB zugegriffen habe oder nicht, das konnte ich bisher nicht beurteilen und möchte ich auch nicht mit in den Vergleich miteinbeziehen. Was mir allerdings aufgefallen ist, ist dass der Quelltext von Python im vergleich zu .NET C# wesentlich besser zu lesen ist.
Ende: ca. 4.5 MB Ramverbrauch für Python, geschätzt 50 MB für Python oder wenn die Anwendung “kompiliert ist” ca. 5 MB für die Python.dll. Zeilen ca. 150. Ausgabegröße 5KB. Kompiliert etwa 50 KB. x32 und x64 kompatibel.
Fazit:
Anwendung in Python: 6 Stunden
Anwendung in .NET C#: ca. 30-40 Stunden
Ich war am Anfang begeistert von .NET, es ist so einfach, es gibt soviele Wege zur Exception, es läuft auf Windows. Super! Doch als ich anfing mit Python zu experimentieren und sag, wieviel Tipparbeit ich mir ersparen konnte, musste ich mir selber eingestehen C# war für mich einmal. Python hat im Sturm mein Programmiererherz erobert.
Wie gesagt, dies ist nur meine Meinung und spiegelt die Erfahrungen wieder, welche ich bei meinem Projekt gemacht habe.
Auch ein PHP & Zend Framework vs. Python & Django Artikel folgen.
Kann Dir da nur beipflichten.
Ich musste diesselben Erfahrungen machen.
Die C# Anwendung war zu langsam, frass zuviele Ressourcen. Nicht zu vergessen dass mir bei meinem Projekt die Express Version nicht genügte.
Ich schrieb dasselbe dann in Python. Auf Rat von anderen. Zuerst war mir das encoding und decoding etwas suspekt, auch als mir der compiler reklamierte weil ich Umlaute im Quellcode verwendete. Aber dann habe ich mich schlau gemacht und finde die ganze Sache sogar sehr praktisch.
Für das Python Projekt brauchte ich 2 Tage, nicht zu vergessen dass ich dabei die Sprache erst erlernte. Das C# Projekt dauerte 10 Tage.
Python gewann. Das Ergebnis war, kleiner und schneller Code. Dabei muss ich gestehen, dass ich dann noch in Schnelle ein GUI machen musste, und dafür Visual Basic 6 verwendete (für native Code ohne diesen .net “Mist”) Schnell noch die basic runtime lib.dazu gelegt. Jetzt konnten die Benutzer über die GUI die Dateien und Optionen selektieren und Python bekam dann die kommandozeile zusammengebaut von vb geliefert, um den kern-Job zu erledigen.
Ich bin begeistert und werde auch in Zukunft gerne auf Python zurück greifen.