找回密码
 加入
搜索
查看: 7075|回复: 21

[效率算法] 也求一个大量文本的问题,(大量数据库界面显示)

 火.. [复制链接]
发表于 2012-7-6 15:54:50 | 显示全部楼层 |阅读模式
大家好 ,我的问题是这样的 ,读取了大量sqlite 数据库 ,然后用  _GUICtrlListView 显示

但是速度好慢  ,因为 不太用 界面,想问问大家有什么   _GUICtrlListView  的使用例子 ,谢谢大家

我现在用的是
先全删除
_GUICtrlListView_DeleteAllItems($ListView1)
再读数据
_SQLite_Open($SQL_DB)

While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
然后 一条条 显示
GUICtrlCreateListViewItem($no & "|" & $aRow[0] & "|" & $aRow[1] & "|" & $aRow[2]  , $ListView1)

最后 刷新

_GUICtrlListView_EndUpdate($ListView1)

=======================================

用这个方法 比较简单 ,但是 数据 大了 ,速度就好慢 ...

请教 大家  有什么相关的法子  呵呵,谢谢大家?
发表于 2012-7-6 17:46:36 | 显示全部楼层

_GUICtrlListView_DeleteAllItems($LVKC)
Local $iRval, $aResult, $iRows, $iColumns
$iRval = _SQLite_GetTable2d($canting, "SELECT rowid,* FROM kucun;", $aResult, $iRows, $iColumns)
_ArrayDelete($aResult, 0)
_GUICtrlListView_AddArray($LVKC, $aResult)


很久前写的代码中的一段 ,都差不多忘了啥意思了。。。

希望对楼主有帮助。
发表于 2012-7-6 19:52:49 | 显示全部楼层
本帖最后由 南一 于 2012-7-6 21:01 编辑

前段时间刚好在搞数据库的效率读取和显示,试验了很多种方法,下面这种的效率算是还蛮优的。
读取一个20个字段,2000条数据的Access表格,读数据库花费1S左右,显示到Listview用了0.4S左右。
下面提供的这个数据库是网上随便找的,可以测试下,我这边测试【连接数据库,读取表,显示到listview】共花费0.6S。
用SQlLite的话,数据库连接部分代码换一下就行了。


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#region ### START Koda GUI section ### Form=
Dim $DataCount = 0
Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)

$Form1 = GUICreate("Test3", 603, 470, 192, 124, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
$LVData = GUICtrlCreateListView("A|B|C|D|E|F|G|H|I|J|K|L|M ", 8, 10, 585, 380)
_GUICtrlListView_SetExtendedListViewStyle($LVData, $iExListViewStyle)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS + $GUI_DOCKTOP)
$BtnRefresh = GUICtrlCreateButton("刷新", 8, 400, 586, 33)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUISetState(@SW_SHOW)
GUISetState(@SW_MAXIMIZE, $Form1)
#endregion ### END Koda GUI section ###
$Begin = TimerInit()
read()
$End = TimerDiff($Begin)
MsgBox(64, "读取", "共" & $DataCount & "条数据,共花费" & $End)
WinActivate($Form1)


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd

Func Read()
        _GUICtrlListView_BeginUpdate($LVData)
        $MDBDataPath = @ScriptDir & "\Northwind.mdb"
        $Read = ObjCreate("ADODB.Connection")
        $Read.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $MDBDataPath)
        $UD_ = ObjCreate("ADODB.Recordset")
        $UD_.ActiveConnection = $Read
        $UD_.Open("Select * From QueryOrders")
        While Not $UD_.eof And Not $UD_.bof
                GUICtrlCreateListViewItem($UD_.Fields(0).value & "|" & $UD_.Fields(1).value & "|" & $UD_.Fields(2).value & "|" & $UD_.Fields(3).value & "|" & $UD_.Fields(4).value & "|" & $UD_.Fields(5).value & "|" & $UD_.Fields(6).value & "|" & $UD_.Fields(7).value & "|" & $UD_.Fields(8).value & "|" & $UD_.Fields(9).value & "|" & $UD_.Fields(10).value & "|" & $UD_.Fields(11).value & "|" & $UD_.Fields(12).value, $LVData)
                $DataCount += 1
                $UD_.movenext
        WEnd
        $UD_.close
        $Read.close
        _GUICtrlListView_EndUpdate($LVData)
EndFunc   ;==>Read


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
xms77 + 30 + 2 学习了!

查看全部评分

发表于 2012-7-6 20:11:47 | 显示全部楼层
我想不过门坎10000的效率
发表于 2012-7-6 22:33:32 | 显示全部楼层
回复 3# 南一
一直想学习数据库,但是一直没有去尝试!学习了,谢谢你的代码,不错~
发表于 2012-7-6 23:34:35 | 显示全部楼层
数据库方面的还没有开始说啊,先看了.
发表于 2012-7-6 23:59:55 | 显示全部楼层
前段时间刚好在搞数据库的效率读取和显示,试验了很多种方法,下面这种的效率算是还蛮优的。
读取一个20个 ...
南一 发表于 2012-7-6 19:52


这是什么情况?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-7-7 01:37:35 | 显示全部楼层
回复 7# lpxx

测试结果不同?
应该跟硬件性能\资源优化(比如已经运行过一次相关程序, 系统已经给程序'铺好了路')有关吧.
发表于 2012-7-7 01:39:39 | 显示全部楼层
本帖最后由 user3000 于 2012-7-7 01:43 编辑

刚才测试了, 第一次 3秒.

第2第3次... 两秒五

以此推断, 他是 i7 的'猛机', 因为我的是台式 i3
(不上图了, 节省点论坛资源...)
发表于 2012-7-7 17:37:09 | 显示全部楼层
学习了,速度很快
 楼主| 发表于 2012-7-7 23:43:55 | 显示全部楼层
回复 2# ashfinal


    谢谢 ,帮助很大 ,用这个方法 速度 快。

但是 我用  _SQLite_GetTable2d 这个函数 为什么 只能 显示 两列 捏?
奇怪...
发表于 2012-7-8 11:08:39 | 显示全部楼层
回复 11# d39hg

这不能吧 SQL语句错误?只试试这个

SELECT * FROM kucun 


实在不行 把代码发上来大家帮你看看吧
发表于 2012-7-8 12:55:09 | 显示全部楼层
看看是怎么东东来着.....
 楼主| 发表于 2012-7-8 17:17:49 | 显示全部楼层
速度 我觉得 上 万就是 瓶颈了,还是 分页 快点 。
发表于 2012-7-8 19:35:31 | 显示全部楼层
这是什么情况?
lpxx 发表于 2012-7-6 23:59


我第一次运行脚本,0.8S,后面几次都是0.6S出头点的,我机子也并非是I7猛机,怪了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-3 21:59 , Processed in 0.088615 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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