- Offizieller Beitrag
Ich habe gerade ein wenig mit TreeView experimentiert und musste feststellen, dass das erstellen eines recht umfangreichen TreeViews sehr lange dauert.
Dieses Beispielscript benötigt bei mir (Ich habe einen Rechner mit "AMD Athlon 64 X2 6000+"-CPU) rund 16 Minuten:
Spoiler anzeigen
#include <GuiConstantsEx.au3>
#include <GuiTreeView.au3>
#include <GuiImageList.au3>
Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]$Debug_TV = False ; Check ClassName being passed to functions, set to True and use a handle to another control to see it work
[/autoit] [autoit][/autoit] [autoit]Example_Internal()
[/autoit] [autoit][/autoit] [autoit]Func Example_Internal()
[/autoit] [autoit][/autoit] [autoit]Local $hItem, $hImage, $iImage, $hTreeView, $hItem1, $hItem2, $hItem3, $hItem4, $start, $end, $a, $b, $c, $d, $e
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
GUICreate("(Internal) TreeView Add Child", 400, 300)
$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
GUISetState()
$hImage = _GUIImageList_Create (16, 16, 5, 3)
_GUIImageList_AddIcon ($hImage, "shell32.dll", 110)
_GUIImageList_AddIcon ($hImage, "shell32.dll", 131)
_GUIImageList_AddIcon ($hImage, "shell32.dll", 165)
_GUIImageList_AddIcon ($hImage, "shell32.dll", 168)
_GUIImageList_AddIcon ($hImage, "shell32.dll", 137)
_GUIImageList_AddIcon ($hImage, "shell32.dll", 146)
_GUICtrlTreeView_SetNormalImageList ($hTreeView, $hImage)
$start = TimerInit()
_GUICtrlTreeView_BeginUpdate ($hTreeView)
For $a = 1 To 20
$hItem = _GUICtrlTreeView_Add ($hTreeView, 0, StringFormat("[%02d] New Item", $a))
For $b = 1 To 20
$hItem1 = _GUICtrlTreeView_AddChild ($hTreeView, $hItem, StringFormat("[%02d] New Child 1", $b))
For $c = 1 To 20
$hItem2 = _GUICtrlTreeView_AddChild ($hTreeView, $hItem1, StringFormat("[%02d] New Child 2", $c))
For $d = 1 To 20
$hItem3 = _GUICtrlTreeView_AddChild ($hTreeView, $hItem2, StringFormat("[%02d] New Child 3", $d))
For $e = 1 To 20
$hItem4 = _GUICtrlTreeView_AddChild ($hTreeView, $hItem3, StringFormat("[%02d] New Child 4", $e))
Next
Next
Next
Next
Next
_GUICtrlTreeView_EndUpdate ($hTreeView)
$end = Round(TimerDiff($start)/1000, 2)
MsgBox(0,'', $end & ' sek.')
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>Example_Internal
Gibt es da irgendwelche Möglichkeiten die Zeit erheblich zu reduzieren?
Mit erheblich meine ich allerdings auch erheblich, also so in den Bereich von 5-10 sek. zu drücken.