Forum: PC-Programmierung C#: Große Datenmengen verarbeiten


von csharp_user (Gast)


Lesenswert?

Hallo,

meine derzeitige C# Anwendung möchte ich erweitern um große Datenmengen 
(>200 Dateien mit ca. 10 MByte Dateninhalt) schnell zu bearbeiten. Die 
Dateien werden nacheinander eingelesen und daraus wird dann ein Bild 
erzeugt.
Gleichzeitig sollte die Anwendung nicht hängen bleiben so dass man das 
GUI Fenster sehen kann. Würde es eventuell Sinn machen diese Auswertung 
auch mit Python zu machen?

von Peter II (Gast)


Lesenswert?

csharp_user schrieb:
> Würde es eventuell Sinn machen diese Auswertung
> auch mit Python zu machen?

wenn du in Python besser bist warum nicht.

Aber C# ist dafür bestimmt nicht langsamer, du musst einfach mit 
Threads/Background Worker arbeiten.

Und 200 x 10Mb ist nun wirklich keine große Datenmenge.

von Der Andere (Gast)


Lesenswert?

Peter II schrieb:
> Und 200 x 10Mb ist nun wirklich keine große Datenmenge.

Na ja wenn das zu erzeugende Bild die kompleten Daten benötigt und im 
Speicher gehalten wird sind es schon mal 2GByte und damit würde es nicht 
mehr auf einem 32 Bit Windows funktionieren.

von Peter II (Gast)


Lesenswert?

Der Andere schrieb:
> Na ja wenn das zu erzeugende Bild die kompleten Daten benötigt und im
> Speicher gehalten wird sind es schon mal 2GByte und damit würde es nicht
> mehr auf einem 32 Bit Windows funktionieren.

Aber zu 99% kann man vorher schon Daten zusammenfassen, sonst würde das 
Bild auch mindestens 2GB groß werden.

von csharp_user (Gast)


Lesenswert?

Für jede Datei soll ein Bild erzeugt werden. Es sollen nicht alle 
Informationen auf ein Bild abgelegt werden.

von Peter II (Gast)


Lesenswert?

csharp_user schrieb:
> Für jede Datei soll ein Bild erzeugt werden. Es sollen nicht alle
> Informationen auf ein Bild abgelegt werden.

wo ist nun genau das Problem?

Wenn du nicht willst, das die GUI blockiert, dann arbeite mit 
Backgroundworker. Wenn glaubst das C# zu langsam ist, und du kein 
Möglichkeit zur Optimierung siehst, dann kannst du dein glück mit Pyton 
oder jeder andere Sprache versuchen.

von Der Andere (Gast)


Lesenswert?

csharp_user schrieb:
> Für jede Datei soll ein Bild erzeugt werden. Es sollen nicht alle
> Informationen auf ein Bild abgelegt werden.

Dann hat sich mein Kommentar erledigt.
Peter II hat dir schon den richtigen Hinweis gegeben:

Peter II schrieb:
> Wenn du nicht willst, das die GUI blockiert, dann arbeite mit
> Backgroundworker.

von Hmm... (Gast)


Lesenswert?

Der Trick sind zum einen die mehrfach erwähnten Backgroundworker damit 
die gui nicht blockiert. Ob nun ein worker alle Bilder verarbeitet oder 
es für jedes Bild einen eigenen gibt hängt von der konkreten Aufgabe ab. 
Denkbar wäre auch eine Art preprocessing mit einem worker pro Bild zu 
machen und dann am Ende in einem weiteren zu mergen.

Ob Python schneller ist wage ich zu bezweifeln. Falls Libraries die 
rechnerei machen dürfte der Unterschied bei gleichen Bibliotheken gegen 
Null gehen.Das reine Laden bzw Schreiben der Daten wird ähnlich fix 
gehen. Falls du selbst rechnest, müsste C# schneller sein. Dann wäre 
eher ein Wechsel in Richtung C oder C++ ratsam (notfalls in eine 
Bibliothek ausgelagert und die gui wie gehabt).  In Zeiten von C 
compilern nach dem Jahr 2000 bringt Assembler hier kaum bzw nur mit 
extremem Aufwand noch ein Quäntchen mehr Performance.

In der Regel optimiert man zuerst am Algorithmus bevor man verzweifelt 
eine "schnellere" Programmiersprache sucht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.