T tseug Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #21 能说一下你的数据每条记录最大占用的空间么, 如果插入时追加, 删除时只做一个标记 速度可以快一些, 释放时只要整块释放就可以了, 也不慢.
A Adnil Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #22 to 张无忌:你没有明白我的意思,数据从内存和硬盘间转移更加耗费执行时间, 我的程序在服务器上面执行的,30M内存根本不算什么,我需要的是加速执行时间, 是否耗费内存无所谓。 to tseug:记录宽度是不确定的。我现在用StringList,追加和删除的操作速度 都很快,就是觉得StringList的释放速度太慢了 :)
to 张无忌:你没有明白我的意思,数据从内存和硬盘间转移更加耗费执行时间, 我的程序在服务器上面执行的,30M内存根本不算什么,我需要的是加速执行时间, 是否耗费内存无所谓。 to tseug:记录宽度是不确定的。我现在用StringList,追加和删除的操作速度 都很快,就是觉得StringList的释放速度太慢了 :)
淡 淡淡的笑 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #24 象你的这个 for i := 1 to 1000000 <<== 这么大的基数.还不如 把数据直接存入某个数据库,呵呵,处理快,删除也快 方法2:在a.free的时候,不要用主线程去free.而是新创建一个线程去free,而主线程去处理 free之后 的那句 showmessage(inttostr(gettickcount-t));... 当然,这个方法还得看你 是用在哪种情况下.同时也得注意在接下来使用a时,前面的a.free是否完全
象你的这个 for i := 1 to 1000000 <<== 这么大的基数.还不如 把数据直接存入某个数据库,呵呵,处理快,删除也快 方法2:在a.free的时候,不要用主线程去free.而是新创建一个线程去free,而主线程去处理 free之后 的那句 showmessage(inttostr(gettickcount-t));... 当然,这个方法还得看你 是用在哪种情况下.同时也得注意在接下来使用a时,前面的a.free是否完全
A Adnil Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #25 我写的不是Mis系统,要求尽可能降低数据库的操作,并在内存占用和CPU占用中取最佳 结合点。 包含1000000条记录的Recordset所占的内存是包含1000000条记录的StringList的一倍以 上。 线程的方法我考虑过,要考虑同步的事情太多,就没有着手了。
我写的不是Mis系统,要求尽可能降低数据库的操作,并在内存占用和CPU占用中取最佳 结合点。 包含1000000条记录的Recordset所占的内存是包含1000000条记录的StringList的一倍以 上。 线程的方法我考虑过,要考虑同步的事情太多,就没有着手了。
T tseug Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #26 如果是算法运行完成后释放, 那你就不用管它了....如果是频繁申请释放 最好还是初始化时申请, 结束前释放...
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #27 那就HeapCreate() HeapAlloc() HeapFree() 或者直接用MemoryStream来做,
A Adnil Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #28 to 张无忌:你怎么还在往这方面考虑? 这只是存储分配的具体问题,用了Heap或者Virual Mem,我同样需要将分配的内存加到一个TList中索引起来才能对应每条记录,而不是30M一起 分配。 我建议你动手一下,进行一下实际的测试才能得到方案的可行性。
to 张无忌:你怎么还在往这方面考虑? 这只是存储分配的具体问题,用了Heap或者Virual Mem,我同样需要将分配的内存加到一个TList中索引起来才能对应每条记录,而不是30M一起 分配。 我建议你动手一下,进行一下实际的测试才能得到方案的可行性。
张 张无忌 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #29 我只提我的看法,我的内存不够,才128,装了2000SERVER,速度慢的很, 而且我在测试软件,没空测试30M,我只根据经验来提我个人的看法。 你要速度,就用上面的函数分配一个空间,做一个连表,还怕速度不够, 你又要速度又要方便,那是不可能的,
我只提我的看法,我的内存不够,才128,装了2000SERVER,速度慢的很, 而且我在测试软件,没空测试30M,我只根据经验来提我个人的看法。 你要速度,就用上面的函数分配一个空间,做一个连表,还怕速度不够, 你又要速度又要方便,那是不可能的,
淡 淡淡的笑 Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #30 我倒.. 使用时不用线程,而只是在释放的时候用另一个线程释放tform1.a 还要考虑到同步么? 用不着吧! 一个线程,不用考虑同步吧.. -_- 我也不是很清楚你的应用.. 说说而已,,不要扁我..
A Adnil Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-15 #31 to 张无忌: 我自己都搞迷糊了,呵呵!我觉得TStringList的效率应该跟 链表差不多啊,而且根据Capacity动态分配,添加字符串尤其快。 to 淡淡的笑:你说得对,不用考虑同步的,Free之前先置成nil就行了(用FreeAndNil)。
to 张无忌: 我自己都搞迷糊了,呵呵!我觉得TStringList的效率应该跟 链表差不多啊,而且根据Capacity动态分配,添加字符串尤其快。 to 淡淡的笑:你说得对,不用考虑同步的,Free之前先置成nil就行了(用FreeAndNil)。
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-16 #32 没有必要的话,不要频繁的释放 我认为应该使用多线程,虽然复杂,但是出于速度考虑,值得 这我有切身体会
A Adnil Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-19 #33 接受答案了,分不多,见谅! 我最终还是选择了线程方式,淡淡的笑和张无忌请到 http://www.delphibbs.com/delphibbs/dispq.asp?lid=1274472各领取150分。
接受答案了,分不多,见谅! 我最终还是选择了线程方式,淡淡的笑和张无忌请到 http://www.delphibbs.com/delphibbs/dispq.asp?lid=1274472各领取150分。