找回密码
 加入
搜索
查看: 3715|回复: 9

[效率算法] _GUICtrlListView_DeleteAllItems 太慢

  [复制链接]
发表于 2011-11-20 16:44:40 | 显示全部楼层 |阅读模式
本帖最后由 haodd 于 2011-11-20 19:00 编辑

有没有更快清空 listview 的所有记录的办法

我的机器 双核的
清空超过 8000+条时就能看到
感觉_GUICtrlListView_DeleteAllItems是一条一条从后面删除的

不是一下子清空的
发表于 2011-11-20 17:13:02 | 显示全部楼层
你清空的时候又多少列表?   我这边挺快的,...
 楼主| 发表于 2011-11-20 17:21:14 | 显示全部楼层
本帖最后由 haodd 于 2011-11-20 19:00 编辑

有8各项左右
item 有 5000+ 到 8000+ 不等

_GUICtrlListView_DeleteAllItems 清空需要2.5秒甚至到3秒才能清空
 楼主| 发表于 2011-11-20 19:01:13 | 显示全部楼层
顶一下 等大神
发表于 2011-11-20 19:21:09 | 显示全部楼层
原来一直在等吗? 打开GUIListView.au3,找到_GUICtrlListView_DeleteAllItems函数,看下内部是怎样工作的吧。
 楼主| 发表于 2011-11-20 19:53:24 | 显示全部楼层
Func _GUICtrlListView_DeleteAllItems($hWnd)
        If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)

        If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
        If IsHWnd($hWnd) Then
                Return _SendMessage($hWnd, $LVM_DELETEALLITEMS) <> 0
        Else
                Local $ctrlID
                For $index = _GUICtrlListView_GetItemCount($hWnd) - 1 To 0 Step -1
                        $ctrlID = _GUICtrlListView_GetItemParam($hWnd, $index)
                        If $ctrlID Then GUICtrlDelete($ctrlID)
                Next
                If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
        EndIf
        Return False
EndFunc   ;==>_GUICtrlListView_DeleteAllItems
 楼主| 发表于 2011-11-20 19:54:19 | 显示全部楼层
回复 5# pusofalse
Func _GUICtrlListView_DeleteAllItems($hWnd)
        If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)

        If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
        If IsHWnd($hWnd) Then
                Return _SendMessage($hWnd, $LVM_DELETEALLITEMS) <> 0
        Else
                Local $ctrlID
                For $index = _GUICtrlListView_GetItemCount($hWnd) - 1 To 0 Step -1
                        $ctrlID = _GUICtrlListView_GetItemParam($hWnd, $index)
                        If $ctrlID Then GUICtrlDelete($ctrlID)
                Next
                If _GUICtrlListView_GetItemCount($hWnd) == 0 Then Return True
        EndIf
        Return False
EndFunc   ;==>_GUICtrlListView_DeleteAllItems
不是很了解

有时候同样的 条数 清空很快 有时候清空有些慢

诚心求解?
发表于 2011-11-20 21:02:04 | 显示全部楼层
换一种思路呢,将Listview控件del掉,然后再重新画一个控件呢,是不是对于数据很多的,速度会相对来说快一些。
发表于 2011-12-2 13:15:31 | 显示全部楼层
GUICtrlSendMsg($listview1, $LVM_DELETEALLITEMS, 0, 0)


非常快
发表于 2011-12-2 17:11:53 | 显示全部楼层
回复 9# yeqing880
$listview1不是句柄呢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 09:59 , Processed in 0.078462 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表