AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Performance: Welche Methode ist besser für Dateiverwaltung ?
Thema durchsuchen
Ansicht
Themen-Optionen

Performance: Welche Methode ist besser für Dateiverwaltung ?

Ein Thema von Nils_13 · begonnen am 27. Jun 2008 · letzter Beitrag vom 28. Jun 2008
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Performance: Welche Methode ist besser für Dateiverwaltung ?

  Alt 27. Jun 2008, 20:52
Hi,

ich arbeite an einer kleinen Dateiverwaltung, welche in leicht abgewandelter Form in der neuen Version meines Multimediaplayers auftauchen wird. Aber es geht vorerst nicht um die integrierte sondern um die selbstständige Variante. Angenommen einem stürzt der Windows Explorer ab, werden alle Fenster die etwas mit diesem zu tun haben geschlossen. Das kann manchmal sehr ärgerlich sein. Daher dachte ich, man könnte mein Programm mehrfach ausführen und wenn eins abstürzt, fällt auch nur ein Fenster weg. Zur schnelleren Auflistung ist es ratsam, eine Liste der Dateiendungen zu erzeugen, deren Icon sich schon in einer Imagelist befinden. Da es verschiedene Ansichten gibt, habe ich zwei Imagelisten und eine Stringlist mit den Dateiendungen. Die Stringlist klingt überflüssig, aber ich denke die Performance von IndexOf sollte den Sinn klarstellen. Da es nun mehrere Programme gibt, wäre es sehr unperformant, wenn jedes Programm seine eigenen Imagelisten usw. enthalten würde. Daher müsste man die beiden Imagelisten und die Stringlist via TIPCStream bereit halten. Dann würde jede Instanz des Programms gleich schnell sein, als wären die ganzen laufenden Programme nur eins. Allerdings frage ich mich, ob das überhaupt so schnell genug wäre: Der Stream muss immer wieder ausgelesen und temporär verarbeitet werden. Kostet das nicht bei vielen Icons extrem viel Zeit ? Ist diese Methode besser als ein einziges Programm ? Oder anders gefragt: Was haltet ihr für sinnvoller ?
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 27. Jun 2008, 21:30
Ich würde darauf verzichten für jede Kleinigket einen eigenen Prozess zu starten (verschwendug von Resourcen)

Speichere doch immer die geöffneten Ordner-Pfade und öffne sie bei einem Absturz automatisch wieder.

Oder wie bei Opera oder Firefox: Nach Absturz Frage, ob letzte Sitzung wiederhergestellt werden soll
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 27. Jun 2008, 21:32
Das dumme ist, dass die VCL nur aus einem Thread heraus verwendet werden kann. Sonst könntest du einfach für jedes Fenster einen Thread erstellen - das wäre meiner Ansicht nach unabhängig genug.

Problematisch ist, dass du die Imagelisten nicht zwischen zwei Programmen teilen kannst. Die Handles sind nämlich Prozess-relativ.

Zum Teilen von Stringlisten würde ich von TStringlist abraten und stattdessen ein Array von kurzen Strings verwenden, das du über die MMF teilst. Das hat den Vorteil, dass du nicht ständig LoadFromStream aufrufen musst, sondern inline arbeiten kannst. Du musst nur aufpassen, dass das Ganze threadsicher ist.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#4

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 27. Jun 2008, 22:05
Der Vorschlag von new32 ist sehr gut, aber wie realisiert man das ? OnDestroy geht denke ich weniger, da OnDestroy auch aufgerufen wird, wenn ein Programm normal beendet wird.

Das mit den Threads wäre wirklich cool, schade dass das nicht geht. Und wieso müsste ich bei einem Stringarray kein LoadFromStream ausführen ? Wie sähe das denn aus ?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 27. Jun 2008, 22:13
Nimm an, dass alle deine Strings maximal 7 Zeichen lang sind - bei Dateiendungen ist das meiner Ansicht nach durchaus praktikabel.

Delphi-Quellcode:
type
TExtStringArray = array[0..(MaxWord div 8 - 1)] of String[7];
PExtStringArray = ^TExtStringArray;

var ExtStrings: PExtStringArray; Str: TIPCStream;
begin
//initialisieren...

ExtStrings := Str.Memory;
end;
Jetzt kannst du direkt auf ExtStrings zugreifen und musst gar nichts mehr mit Str machen. Das einzige Problem liegt in der Threadsicherheit, aber auch das lässt sich lösen, indem man das Längen-Feld des Shortstrings als Flag missbraucht (0 = leer, andernfalls belegt).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 27. Jun 2008, 22:23
erstelle bei jedem Öffnen eines Ordners einen Eintrag z.B. in einer Textdatei und lösche ihn beim "Schließen" des Ordners.

Ist alles ordnungsgemäß geschlossen worden sollte die Datei beim nächsten Start leer sein, sonst kannst du die noch vorhandenen Einträge erneut öffnen.

Um das Programm nach einem Absturz automatisch neu starten zu lassen musst du einen zweiten Prozess starten, der nur überwacht, ob das eigentliche Programm geschlossen wird (WaitForSingleObject) und dann, jenachdem, ob das Prog. "normal" oder nicht "normal" beendet wurde es neu startet, oder sich selbst beendet.
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 28. Jun 2008, 09:21
Dann vielen Dank an euch beide. In meinem Programm kann man sich so gut wie alles einstellen. Daher dachte ich mir, ich baue beide Methoden ein und der Benutzer muss sich entscheiden.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 28. Jun 2008, 09:54
Was ist denn das für eine Vorgehensweise, das ich mir Gedanken über das Programmverhalten mache, wenn es abstürzt? also ich schreib einfach stabile Programme, und spare mir diese Überlegungen. Ich würde die hierfür verschwendete Energie lieber in das Studium der Grundregeln für robiste Software stecken.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#9

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 28. Jun 2008, 10:02
Es geht nur um Vorkehrungen, es gibt immer Möglichkeiten ein Programm zum Absturz zu bringen. Genauso wie du in fast jedem Spiel Sachen machen kannst die du nicht sollst. Weil aber Grundvorkehrungen fehlen kannst du diese Lücken nutzen.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Performance: Welche Methode ist besser für Dateiverwaltu

  Alt 28. Jun 2008, 11:45
Wenn du getrennte Prozesse verwendest, hast du aber trotzdem das Problem mit den nicht identischen GDI-Handles.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz