Zum Inhalt springen

vb.net Programm beschleunigen


Empfohlene Beiträge

Geschrieben

Hey,

Ich suche momentan einen einfachen/schnellen Weg mit dem mein Programm

schneller speichert oder XML Dateien ausliest.

Habe daran Gedacht mit Multithreading zu Arbeiten und meine Schleifendurchläufe zu optimieren.

Nun wollte ich gerne Fragen ob es eine weitere Möglichkeit zum Performanceboost gibt und

welche Art von Datensammlung (z. B. Listen/Collections außer Arrays) am Schnellsten ist.

(Voraussetzung an eine Sammlung sind : dynamische Anzahl (unbegrenzt u.o. selbsterzeugende Anzahl)

vielen Dank im voraus.

Mit Freundlichem Gruß

Geschrieben

Hi bbuild,

ich kenn' mich jetzt mit VB.NET nicht ganz so gut aus, ich denke aber mein PHP-Wissen lässt sich auf VB übertragen ;)

Du könntest mal versuchen die Datei Stück für Stück einzulesen, zu bearbeiten und dann schonmal abzuspeichern. Das kannst du ja in 10MB-Schritten machen und die neu generierten Daten einfach an die neue XML-Datei anhängen.

MfG

jan

Geschrieben

Erzähl doch mal ein wenig mehr über dein Programm und was es tut. Die besten Möglichkeiten zur Performancesteigerung liegen oft im falsch gewählten Algorithmus, aber dazu schreibst du gar nichts.

Wenn ein bestimmter Container in jeder Situation der schnellste wäre, bräuchte man die anderen nicht. Welcher Container der beste für dich ist, hängt davon ab, wie du ihn verwendest.

Geschrieben

ok,

also mit dem Programm lese ich eine XML Datei aus und speichere Teile (bis jetzt) in einer Liste ab. Array habe ich aus dem Grund nicht gewählt, weil ich nicht weis wie viele Elemente es irgendwann mal werden. Zum Algorithmus ist zu sagen das alles Sequentiell passiert und alle Schritte von einander abhängig sind, da diese später wiedergegeben werden.

Ich habe eigentlich nur an allgemeine Performance Tipps gedacht.^^

Multithreading und Schleifenoptimierung(zusammenfassen von mehreren Schleifen die das selbe tuen in 1 Schleife) schließe ich mittlerweile auch schon aus, da ich sonst alle Daten in Listen schreiben müsste was alles nochmal bisschen verlangsamen würde. (+3 [zusätzliche Listen mit x Einträgen])

Programm enthält :

Zugriff auf eine Textdatei; XML Datei

Geschrieben

Multithreading und Schleifenoptimierung(zusammenfassen von mehreren Schleifen die das selbe tuen in 1 Schleife) schließe ich mittlerweile auch schon aus, da ich sonst alle Daten in Listen schreiben müsste was alles nochmal bisschen verlangsamen würde. (+3 [zusätzliche Listen mit x Einträgen])

Nur kurz zu Thema Multithreading. Durch das verwenden von Thread ist man nicht automatisch performanter unterwegs. Ein weit verbreiteter Irrglaube ist, das Thread Zeitgleich parallel ausgeführt werden.

Wie Klotzkopp schon sagte arbeite lieber am Algorithmus.

Beziehungsweise gib diesbezüglich mehr Informationen, eventuell kann man dir hier helfen diesen zu verbessern.

Wie ließt du den die Xml Datei aus? Zeilenweise oder im ganzen?

Welche Klasse nutzt du dafür ? Eventuell die .NET eigene Xml Klasse oder eine eigenkreation?

Wenn es eine eigene Klasse ist könntest du uns ja mal den Part zeigen, wo du die xml einließt und entsprechend parsed.

lg

Gateway

Geschrieben
Durch das verwenden von Thread ist man nicht automatisch performanter unterwegs. Ein weit verbreiteter Irrglaube ist, das Thread Zeitgleich parallel ausgeführt werden.

grundsätzlich kann ich dem zustimmen

allerdings:

auf mehrkernsystemen ist es in der Regel so, dass die Threads auch auf verschiedene Kerne verteilt werden, somit kann man davon ausgehen, dass der Code tatsächlich parallel ausgeführt wird, wenn man mehrere Kerne und/oder Prozessoren hat

das Problem ist aber in jedem Fall, dass man in einem Thread nicht ohne weiteres sagen kann, wie weit der andere Thread ist

wenn man einen Algorithmus hat, bei dem immer das letzte Ergebnis benötigt wird, dann ist Multithreading nicht hilfreich und ließe sich nur viel zu umständlich umsetzen

auch ich sage: arbeite am Algorithmus

wenn du eine schnellere Implementierung findest, dann solltest du diese auch nutzen

dabei solltest du auch einen höheren Speicheraufwand in Kauf nehmen

welche Art der Speicherung die Beste ist, hängt davon ab, wie du sie benutzen musst

da bei dir häufig Änderungen in der Liste auftreten und du die Gesamtlänge vorher nicht bestimmen kannst, wäre ein Array (wie du schon erkannt hast) keine gute Wahl

eine Alternative ist die LinkedList, mit der du dich beschäftigen willst

je nachdem, was deine genauen Anforderungen sind, kann es sein, dass eine eigene Implementierung nützlich sein könnte

wenn du beispielsweise in jedem Schritt Zugriff auf das 1. und letzte Element haben musst, sollte in der LinkedList auch eine Referenz auf das letzte Element sein, da ansonsten jedes Mal vom 1. bis zum letzten durchgegangen werden muss, um das letzte Element zu ermitteln

da du keine weiteren Anforderungen für die Liste genannt hast, kann ich auch keine empfehlung aussprechen

Geschrieben

Kommt vor allem auch auf die Art des Zugriffs an. Wie Sacaldur schon beschrieben hat, kommt es auf die Art des Problems an, wie man seine Daten strukturiert. Je nach Problem könnte dann eine Linked List, eine List<T> oder auch ein Dictionary Sinn machen.

Multithreading bietet auf Mehrkernprozessoren vorteile, wenn du verschiedene, große Aufgaben hast, die du auf mehrere Kerne verteilen kannst. Nur weil du 4 Kerne hast, läuft die Anwendung aber auch nicht 4 mal so schnell. Außerdem stellt das zusätzliche Anforderungen an deine Klassen und Methoden (Stichwort: Threadsafe).

Wenn du von XML sprichst, würde ich aber sagen, dass hier im Algorithmus das meiste Potential besteht. Die verschiedenen XML Zugriffstechnologien im .NET Framework sind unterschiedlich schnell, haben aber eben auch unterschiedliche Vor- und Nachteile. Vielleicht kannst du uns hier erst einmal mehr Informationen geben, möglichst auch einen Code Ausschnitt.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...