Performence von Applikationen
-
Hallo zusammen,
ich habe mir heute nacht versucht einen Hex Editor zu schreiben. Jedoch scheitert das ganze schon bei der Performence vom einlesen der Dateien.
Ich benutze die von Jansen zusammengestellte Ablauffolge:
TMemoryStream *mem = new TMemoryStream(); mem->LoadFromFile(datei); unsigned char ch[2]; for (int i = 0; i < mem->Size; i++) { mem->Read(ch, 1); if (ch[0] < 32) { mem->Position--; mem->Write("\xBF", 1); // 0xBF = 191 = '¿' } } mem->Position = 0; Memo1->Lines->LoadFromStream(mem); delete mem;
Leider braucht er für eine Datei in Größe von 540 kB >10 Minuten. Während Ultraedit dabei nicht mal 2 Sekunden dafür braucht.
Wie kommt das zustande?
-
Der UltraEdit lädt nicht die ganze Datei und rendert diese vor, sondern rendert nur genau das, was da auch angezeigt wird. Das lässt sich sehr schön mittels einem Document/View oder MVC-Modell erreichen. (vgl Experimentelle Dokument/View-Dokumentation) Dabei lädst du die ganze Datei schön binär irgendwo in den Speicher (oder hälst dir irgendwo die Anfangs und Endpunkte der Darstellung und liest direkt aus dem File, oder unterhälst eine intelligente Pufferstrategie) und das Anzeigeelement (View) sorgt dann für die Aufbereitung der Daten die du gerade anzeigen musst und die Darstellung derselben.
Ist jetzt etwas abstrakt ausgedrückt. Wenn du dazu noch was wissen willst, frag ungeniert nochmals nach (o:
falls es dich beruhigt, hab mit den selben Problemen auch schon vor einiger Zeit mal zu Kämpfen gehabt (o:
-junix
-
vielleicht kannst du mit diesen links was anfangen.
http://www.catch22.org.uk/tuts/bigmem01.asp
http://www.catch22.org.uk/tuts/bigmem02.asp
-
linkas schrieb:
vielleicht kannst du mit diesen links was anfangen.
http://www.catch22.org.uk/tuts/bigmem01.asp
http://www.catch22.org.uk/tuts/bigmem02.aspHi das Beispiel trifft es jedenfalls voll auf den Punkt. Jedoch ist mir das nicht so genehm da es Visual C++ ist. Eine Implementierung in C Builder ist leider nicht möglich, oder täuscht das ganze.
Leider ist die Beschreibung auch alles in Englisch. Gibt es nicht ein Beispiel eventuell was in Deutsch erklärt wird, damit man auch die Funktionsweise versteht?
-
Eigentlich ist es WinAPI (das Meiste)... was da sonst noch steht entspricht in Etwa dem, was ich schon geschrieben hatte. Nur dass sie sich jetzt hald bei der Pufferung der Basis-File der Technik der Memory-Mapped-files bedient haben.
-junix
-
junix schrieb:
Eigentlich ist es WinAPI (das Meiste)... was da sonst noch steht entspricht in Etwa dem, was ich schon geschrieben hatte. Nur dass sie sich jetzt hald bei der Pufferung der Basis-File der Technik der Memory-Mapped-files bedient haben.
-junix
Das heist dann eigentlich das ich das Beispiel was ich auf http://www.catch22.org.uk/tuts/bigmem01.asp gefunden habe, ohne Probleme mit dem C++ Builder nachbauen könnte. Vielleicht bringe ich mir dann gleich WinAPI näher.
-
Naja Copy-Paste wird kaum funktionieren. Aber ja, müsste gehen. Seh da praktisch nix MSVC-spezifisches und sie haben auch nix anderes als ein Document/View gebaut...
-junix