| |
|
|
E.T. | Lt. Hilfe X2 > Techn. Daten sollen sich die möglichen Einträge in der Listboxliste auf "2 Mia Einträge in der Listboxliste" erhöht haben (eigentlich schon ab 11).
Dem ist wohl nicht so (es folgt umständliches Beispiel ) : KompilierenMarkierenSeparierenwindowtitle "Listboxlisten - Test " + $ProfVer
windowstyle 1024+16+8
window 250,150
var txt1& = @Control("STATIC", "Fülle Listboxliste...", $50000001,0,3,width(%hwnd),15, %hWnd,0, %hInstance)
var txt2& = @Control("STATIC", "- - -", $50000001,0,20,width(%hwnd),15, %hWnd,0, %hInstance)
var txt3& = @Control("STATIC", "Füllstand lt. getcount(0) :", $50000001,0,50,width(%hwnd),20, %hWnd,0, %hInstance)
var txt4& = @Control("STATIC", "- - -", $50000001,0,75,width(%hwnd),15, %hWnd,0, %hInstance)
whileloop 1,300000
settext txt2&,format$("###,##0" ,&loop)
addstring(0,str$(&loop))
settext txt4&, format$("###,##0" ,getcount(0))
endwhile
waitinput
end
Wie man sehen kann, bleibt die LBL immer noch bei 262.144 stehen, bei mir zumindest. Drum hab ich auch die Profan-Version mal in die Titelzeile eingebunden, um sicher zu gehen, in der richtigen Version zu sein.
|
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 07.09.2012 ▲ |
|
|
|
|
E.T. | Huch, wenn man einmal beim testen ist: Unter 11.2 funktioniert es auch nicht, gibt's aber wenigstens noch 'ne Fehlermeldung, welche ab X2 fehlt:
|
|
|
| XProfan X2Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 07.09.2012 ▲ |
|
|
|
|
Peter Max Müller | Auf der Listbox-Liste Seite der Hilfe steht:
Seit jeher kennt XProfan eine Stringliste, die sogenannte "Listboxliste". Ursprünglich geplant, um Daten für die Anzeige in einer vorgegebenen Listbox mit @Listbox$ anzuzeigen, vermag sie jedoch viel mehr. Ab Version 11 kann sie bis zu 260.000 Strings aufnehmen und verwalten.
|
|
|
| |
|
|
|
| Hat zwar nicht genau etwas mit dem Problem zu tun aber wollte trotzdem was testen... KompilierenMarkierenSeparieren Da sind z.B. 300.000 (und mehr) kein Problem. |
|
|
| |
|
|
|
RGH | Dann will ich mal etwas Licht ins Dunkel bringen:
In der Tat ist die Grenze geblieben. Aber als aus dem Befehl AddString ein Teil der Funktion AddString() wurde, wurde vergessen, die Fehlermeldung zu übernehmen.Die Funktion AddString() liefert aber 1 zurück, wenn sie erfolgreich war und 0, wenn nicht. Für AddString(0,...) könnte ich die Fehlermeldung natürlich wieder einbauen.
(Ich hatte zwischenzeitlich eine dynamische Variante probiert, die wirklich MAXINT als Grenze gehabt hätte, aber die war deutlich langsamer. Daher hatte ich davon wieder Abstand genommen. Ich könnte allerdings die Grenze auf ca. 1 Million erhöhen, wenn Bedarf bsteht.)
Gruß Roland |
|
|
| XProfan X2Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.01.2013 ▲ |
|
|
|
|
Jörg Sellmeyer | Immer so hoch wie es geht, ohne dass dadurch Abstriche an anderer Stelle gemacht werden müssen. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 04.01.2013 ▲ |
|
|
|
|
| Spricht etwas dagegen einfach die Microsoft interne Listbox zu verwenden? Die scheint mir am schnellsten bei bestimmtem Stil und verkraftet viel mehr Einträge. Den Stil muss ich raussuchen. |
|
|
| |
|
|
|
RGH | iF (04.01.13)
Spricht etwas dagegen einfach die Microsoft interne Listbox zu verwenden? Die scheint mir am schnellsten bei bestimmtem Stil und verkraftet viel mehr Einträge. Den Stil muss ich raussuchen.
Den Gedanken hatte ich auch schon. Dann könnte es auch eine Systemvariable mit dem Windows-Handle der Listbox-Liste geben. (Die mit create("LIST",...) erzeugten Stringlisten sind ja auch nichts anderes als Listboxen ohne Anzeige.)
Gruß Roland |
|
|
| XProfan X2Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.01.2013 ▲ |
|
|
|
|
RGH | BTW: Ich nutze folgende Funktion zum Erzeugen der Listen:
CreateWindow('LISTBOX', nil, sort or multi,0, 0, 0, 0, 0, 0, HInstance, NIL)
Also gar keinen Stil außer gegebenenfalls lbs_sort und/oder lbs_multiplesel.
Gruß Roland |
|
|
| XProfan X2Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.01.2013 ▲ |
|
|
|
|
RGH | Ok, ich habe es eben getestet:
Mit der Listbox-Liste dauert z.B. das AddString etwa 4 mal so lange, wie die bisherige Lösung. Das betrifft dann so Sachen wie AddFiles oder die ganzen MoveToList-Funktionen. Ich denke, das ist nicht Sinn der Sache.
Gruß Roland |
|
|
| XProfan X2Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 04.01.2013 ▲ |
|
|
|
|
| Auf meinem Computer i7-3770K ist das Befüllen der internen ListBoxListe bei 250.000 Einträgen ca. 13 mal schneller als AddString auf ein ListBox-Control und dauert 281ms.
Download
KompilierenMarkierenSeparieren {$cleq}
cls
print "250.000:\nX:",test2(250000),"ms\nI:",test3(250000),"ms\n"
print " 50.000:\nX:",test2(50000),"ms\nI:",test3(50000),"ms\n"
print " 5.000:\nX:",test2(5000),"ms\nI:",test3(5000),"ms\n"
print " 200:\nX:",test2(200),"ms\nI:",test3(200),"ms\n"
waitinput
end
Proc test2(long c)
long lst=create("list",0)
long tme=getTickCount
whileloop c
addstring(lst,"1234567890")
wend
tme=getTickCount-tme
destroyWindow(lst)
return tme
endproc
Proc test3(long c)
clearlist
long tme=getTickCount
whileloop c
addstring "1234567890"
wend
tme=getTickCount-tme
return tme
endproc
|
|
|
| |
|
|
|
Julian Schmidt | Bei meinen Rechner ist es sogar noch krasser. Um die 27-28 mal schneller... |
|
|
| |
|
|