AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

eintragen in listview sehr, sehr langsam

Ein Thema von Marco Steinebach · begonnen am 3. Jun 2007 · letzter Beitrag vom 3. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2   
Marco Steinebach

Registriert seit: 4. Aug 2006
490 Beiträge
 
Delphi 5 Enterprise
 
#1

eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 16:15
Hallo Listers,
ich habe eine Listview und eine Stringliste. Die Einträge der Stringliste sollen in die Listview übertragen werden. Allerdings ist mein Verfahren fürchterlich langsam, d.h., für ca. 1.100 einträge, braucht das ganze ca. 5 Minuten.
Hab ich hier was falsch gemacht? Gibt es eine bessere Lösung?
Hiiiiilfe!
Hier der Code:
Delphi-Quellcode:
    // liste ist eine stringliste die mit Werten gefüllt ist.
    // lv die Listview, die gefüllt werden soll.
    // NeuerEintrag: TListItem;
    Lv.Items.BeginUpdate;
    for i := 0 to Liste.Count - 1 do
    begin
        NeuerEintrag := Lv.Items.Add;
        NeuerEintrag.Caption := IntToStr(lv.Items.count);
        NeuerEintrag.SubItems.Add(ExtractFileName(Liste[i]));
        NeuerEintrag.SubItems.Add(ExtractFilePath(Liste[i]));
    End;
    Lv.Items.EndUpdate;
Vielen Dank und herzliche Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 16:22
Der Fehler muss woanders liegen, bei mir geht das in Sekundenbruchteilen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 16:39
Da sieht in der Tat nicht so aus, als ob es lange dauern könnte.

Du könntest aber dennoch ein wenig optimieren.

Wir haben doch keinen Platz :

NeuerEintrag =>

Delphi-Quellcode:
with ListView.Items.Add do begin
Caption := 'xxxx';
Subitems.Add('xxxx');
end;
Warum denn jedesmal zählen?

xx.Caption := IntToStr(lv.Items.count); =>
xx.Caption := IntToStr(i + 1);
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
490 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 17:14
Zitat von s-off:
Da sieht in der Tat nicht so aus, als ob es lange dauern könnte.
das hab ich ja auch gedacht...
Optimiert ist's auch, sieht jetzt schöner aus, läuft aber als net schneller!
Kann's an Delphi 5 liegen? Das hab ich nämlich noch!
Es sind keine weiteren Ereignisse für die ListView definiert. Bei mir gibt's pro sekunde so ungefähr 3 Items...
Hat jemand noch 'ne idee?
Viele grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#5

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 17:16
Für alles über einer Handvoll an Einträgen würde ich bei TListView immer OwnerData verwenden, sprich Lv.Items.Count := Liste.Count und dann in OnData jeweils zuweisen.
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 17:51
Hallo

wie hast due die Spaltenbreiten gesetzt? stehen die auf columnheaderwidth/textwidth oder auf einer festen breite?

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 18:00
@Marco

Kann ich mir eigentlich nicht vorstellen, das es so lange dauert?!
Hast du zu wenig verfügbaren Arbeitsspeicher, eine andere aktive Anwendung (zb. Firefox) die
manchmal zu viel Leistung haben möchte? Hast du an der richtigen Stellen die Zeit gemessen?

Mach mal bitte eine Anwendung nur mit dem obigen Code und poste die Ausführungszeit.
Gruss Gremlin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 18:10
optmieren könntest du noch in dem du nicht ExtractFileName und ExtractFilePath verwendest sondern nur eins von beiden und die länge des resultates verwendest um das andere zu erhalten. Ansonsten muss jedesmal ein weiteres mal danach gesucht werden wo der pfad zu ende ist und der dateiname folgt. Selbst implementieren ginge hier natürlich auch noch.

Wieviel Einträge befinden sich in deiner Listbox zu dem Zeitpunkt wenn du einen neuen Eintrag hinzufügst? Ich kann mir beim besten Willen nicht vorstellen das nur 3 Einträge pro Sekunde hinzugefügt werden wenn BeginUpdate und EndUpdate wirklich eingesetzt werden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 18:14
Verhindere, dass der Listview bei jedem Entrag neu gezeichnet wird: MSDN-Library durchsuchenWM_SETREDRAW.
Über Sinn und Unsinn für den Anwender mit über tausend Einträgen im Listview wollen wir hier mal nicht weiter diskutieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: eintragen in listview sehr, sehr langsam

  Alt 3. Jun 2007, 18:17
Womit allerdings immer noch nicht geklärt wäre, wo der enorme Unterschied herkommt (5 Minuten bei ihm/ihr gegenüber gefühlten 0,7 Sekunden bei mir). Ich habe dabei den Source 1:1 übernommen, sogar die Komponenten gleich benannt. Könnte es sein, dass versehentlich Ereignisse ausgelöst werden, an die man gar nicht gedacht hat?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:59 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