Français
Forum

SearchText vieeeel trop lente

 
allô Frank,

je hatte avant, dans einem meiner Programme une Windows Listbox par un Listview auszutauschen.
dans einem Testlauf volonté ca. 20.000 Zeilen eingefügt wobei avant dem insérer chacun la ligne geprüft wird, si cet déjà vorhanden ist.
qui Listbox-Version était dans knapp 4 Minuten par, qui Listview Version habe je pour 20 Minuten et 1/10 qui travail abgebrochen.

dans qui Listbox Frage je ca so ab:
exist& = SendMessage(box&,$01A2,-1,addr(edit$))

je cherche pour qui genauen la ligne

chez dem Listview fonctionne cela so:
exist& = SearchText(box&,0, GetLines(box&),1,Addr(edit$),10,addr(exist2&))

Genauer String, cherche seulement dans qui betreffenden Spalte. déjà chez 2.000 Zeilen verdammt lente.

-Gibt es aucun Vergleichbare Windows Message, qui entweder du verwenden peux ou bien du mir empfehlen peux.

-peux du den Aufbau qui Funktion encore la fois überdenken, je suis sûrement, dass on le reste optimaliser peux.

-je ne sais pas comme allez mais je serait es so faire:
seulement pour dem ersten marque chacun la ligne chercher, chez übereinstimmung aussi cela zweite abfragen usw.

-Habe je une vorhandenen Befehl übersehen?

-Sinnvoll wäre un SearchText-Lite variante, qui puis optimiert ist seulement dans einer Spalte trop chercher et chez qui ersten Fundstelle juste abbricht. Den paramètre pour Fundstellen-Spalte pourrait on hierbei aussi omettre.

si du es schaffst, qui Funktion doppelt so vite trop faire peux je encore rien anfangen, seulement si es zumindest demie so vite comment dans den Listboxes ist wäre es akzeptabel. Avez- du c'est machbar?

Salut,
Sven
 
10.11.2004  
 



Habe folgendes dans qui Win32.hlp trouvé, konnte es cependant pas erfolgreich dans un Funktion ou bien Message umsetzen.

LVM_FINDITEM
wParam = (WPARAM) (int) iStart;
lParam = (LPARAM) (const LV_FINDINFO FAR *) plvfi;

// Corresponding macro
int ListView_FindItem(HWND hwnd, int iStart,
const LV_FINDINFO FAR* plvfi);

The LVM_FINDITEM message searches for a list view item with le specified c
haracteristics. You can send this message explicitly or by using le ListVi
ew_FindItem macro.

Paramètres

hwnd

Handle to le list view control.

iStart

index of le item to begin le search with or -1 to start à partir de le beginnin
g. The specified item is itself excluded à partir de le search.

plvfi

Pointer to à LV_FINDINFO structure that contains information about what to
search for.
Retour Value

Returns le index of le item si successful or -1 otherwise.

je halte es pour unwahrscheinlich mais peut-être bremst aussi qui Befehl GetLines(box&) qui ganze l'affaire? Liest qui Befehl seulement une Wert aus ou bien muss il chaque fois le Zeilen de 0 jusqu'à Ende durchzählen?
 
10.11.2004  
 



allô Sven,

c'est moi nie aufgefallen, cela qui Befehl so lente son soll...
Wahrscheinlich nécessaire cela System länger, données aus einem Listview trop lesen, comme aus Listboxen. Hat oui im Regelfall aussi plusieurs Spalten.

et cela Listview strebt après, beim effacer ou bien insérer eines Eintrags cela Listview trop aktualisieren. cela kostet enorm Zeit, peux mais léger abgestellt volonté

SendMessage(listview&,11,0,0) Neuaufbau des Listviews SendMessage(li
stview&,11,1,0) Wiederaufbau des Listviews (standart).[/CODE

je crois aussi, du versuchst dein Problem verkehrt trop lösen.
je serait es so faire, le moi qui 20000 Zeilen insérer serait et zum Sch
luss seulement avec DeleteDoubleItems() alle doppelten Einträge effacer serait. So
:

[CODE]SendMessage(listview&,11,0,0) Neuaufbau des Listviews verhinde
rn !

Whileloop GetColumns(listview&)
DeleteDoubleItems(listview&,(&loop-1))
Endwhile

SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).

Teste la fois...
Salut, Frank
 
10.11.2004  
 



Nochmal...

allô Sven,

c'est moi nie aufgefallen, cela qui Befehl so lente son soll...
Wahrscheinlich nécessaire cela System länger, données aus einem Listview trop lesen, comme aus Listboxen. Hat oui im Regelfall aussi plusieurs Spalten.

et cela Listview strebt après, beim effacer ou bien insérer eines Eintrags cela Listview trop aktualisieren. cela kostet enorm Zeit, peux mais léger abgestellt volonté

SendMessage(listview&,11,0,0) Neuaufbau des Listviews
SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).

je crois aussi, du versuchst dein Problem verkehrt trop lösen.
je serait es so faire, le moi qui 20000 Zeilen insérer serait et zum Sch
luss seulement avec DeleteDoubleItems() alle doppelten Einträge effacer serait. So:

SendMessage(listview&,11,0,0) Neuaufbau des Listviews verhindern !

Whileloop GetColumns(listview&)
DeleteDoubleItems(listview&,(&loop-1))
Endwhile

SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).

Teste la fois...
Salut, Frank
 
10.11.2004  
 



allô Frank, merci pour qui rasche Antwort.

Hat es quelque chose trop dire, dass DeleteDoubleItems() dans qui Aider pas dokumentiert ist? Beim Effacer doppeler Einträge soll seulement une Column berücksichtigt volonté. plonger dans Spalte 1 Doppelte Einträge sur so devoir vous gelöscht volonté, juste quoi dans den anderen Spalten ist.

là sur längere Zeit la fois plus et la fois moins Zeilen eingefügt volonté, soll qui Aktualisierung eigentlich toujours tout de suite stattfinden et doppelte Zeilen trop aucun Zeit dans qui liste son. c'est aussi pas qui Aktualsierung, qui longtemps braucht mais seulement cela SearchText() Notfalls muss je es plan doch am Ende sur une Double Befehl faire, et mich avec den doppelten Zeilen jusqu'à dahin abfinden. si qui Befehl aussi spaltenweise funktioniert - la hâte du en supplément une concept?

Sven
 
10.11.2004  
 



Hi,

> allô Frank, merci pour qui rasche Antwort.
>
> Hat es quelque chose trop dire, dass DeleteDoubleItems() dans qui Aider pas dokumentiert ist?

Hmm, dans meiner Aider ist qui Funktion erklärt...
la hâte du la fois un Update gemacht ?

> Beim Effacer doppeler Einträge soll
> seulement une Column berücksichtigt volonté. plonger dans Spalte 1 Doppelte Einträge sur so devoir vous gelöscht volonté, juste quoi
> dans den anderen Spalten ist.

encore einfacher, ensuite peux du qui Whileloop-Boucle oui omettre.

>
> là sur längere Zeit la fois plus et la fois moins Zeilen eingefügt volonté, soll qui Aktualisierung eigentlich toujours tout de suite stattfinden
> et doppelte Zeilen trop aucun Zeit dans qui liste son.

ensuite baust du DeleteDoubleItems plan häufiger un. Anstatt trop vérifier, si qui Eintrag doppelt ist, benutzt du DeleteDoubleItems.

> c'est aussi pas qui Aktualsierung, qui longtemps braucht mais seulement
> cela SearchText() Notfalls muss je es plan doch am Ende sur une Double Befehl faire, et mich avec den doppelten Zeilen
> jusqu'à dahin abfinden.

Comme je le disais, kontinuierlich einbauen...

> si qui Befehl aussi spaltenweise funktioniert - la hâte du en supplément une concept?

Hab je oui déjà dit.
ici ist qui Syntax:

DeleteDoubleItems(H,S)

Löscht alle doppelt ou bien mehrfach vorkommen Itemtexte dans einer Spalte eines Listviews.

H : Long - Handle eines avec CreateListview() erstellten Listview Controls
S : Long - index qui Spalte de H, en mehrfach vorkommende Itemtexte gelöscht volonté devoir (nullbasierend)

une schnelle et bequeme Methode, doppelte, bzw. mehrfache Einträge trop effacer.
Um un komplettes Listview avec cela trop Travailler, doit alle Spalten durchlaufen volonté, z.B. so:

SendMessage(listview&,11,0,0) Neuaufbau des Listviews verhindern !

Whileloop GetColumns(listview&)
DeleteDoubleItems(listview&,(&loop-1))
Endwhile

SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).

Salut, Frank
 
10.11.2004  
 



allô Frank,
je denke je habs kapiert. je fais es sans SearchText et suis dabei encore 3la fois plus rapide comme avec qui Listbox Version.

Listbox tout de suite sur doppelte vérifier: 3:30 Minuten
Listbox sans Prüfung: < 1 minute

ListView tout de suite sur doppelte vérifier: > 20 Minuten
Listbox sans Prüfung: ca. 1 minute

avec cela peux je vivre!

seulement malheureusement gibts den DeleteDouble Befehl dans dem aktuellen paquet pas. je suis aussi droite verwirrt quoi qui Version et Aider Fichiers angeht.

Aktueller Télécharger:

Version 1.5
dernier Stand: 25.Nov.2003
Funktion inconnu: DeleteDoubleItems

Aider im Web:

Version 1.6
dernier Stand: 25.Nov.2003
DeleteDoubleItems() dans Aider aufgeführt

maintenant suis je mais verwirrt! wohin bekomme je qui Version 1.6,
quoi ist ausser dem DeleteDoubleItems encore en supplément gekommen et
pourquoi ist qui Entwicklungsstand aussi 25.Nov.2003 comment chez
qui 1.5.

Salut,
Sven
 
10.11.2004  
 



Hi,

ah, là hab je wohl Mist gebaut.
je werd dir qui neue Dll-Version la fois so zuschicken, per Mail.
cela Update venez ensuite, si encore quelques Funktionen dazgekommen sommes.

Salut, Frank
 
10.11.2004  
 



wohin gibt es car qui Version 1.6 ?
sur qui Website finde je seulement qui 1.5

Gruss Dirk
 
10.11.2004  
 



Hi,

oui, 1.5 ist cela dernier Update.
1.6 Beta ist qui Arbeitstitel meiner Dll-Version, à qui je momentan sporadisch arbeite. Bisher habe je es so gehalten, cela un nouveau Update erfolgt, sobald quelques neue Funktionen dazugekommen sommes. et so wird es aussi weiterhin rester.
quand oui c'est ca cela 1.6 Update maintenant erscheint, weiss je encore pas, sicherlich mais encore cet l'an.

Salut, Frank
 
10.11.2004  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

5.073 Views

Untitledvor 0 min.

Themeninformationen

cet Thema hat 1 participant:

unbekannt (10x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie