(2003-02-11 20:26:36) tseug
这个用内存映射可以, 用BlockRead也可以,但是由于是搜索,所以缓冲区的尺寸要注意考虑,需要根据搜索字符串的长度处理...
(通过服务器中转)
(2003-02-11 20:28:38) DELPHI-FANS
是啊,如果要做到最快,开始的时候估计要多次测试,比较以后才能定缓冲区的大小,一般我认为应该是4M左右比较合适,不知道你的看法是?
(2003-02-11 20:36:40) tseug
大小需要考虑2方面,
1 磁盘扇区的尺寸,512的整倍数, 另外是内存页的尺寸4K, 所以应该用4K的倍数
2 需要搜索的字符串的长度, 缓冲区长度不是它的整数倍, 要处理边界情况, 这个影响代码的复杂度...
(通过服务器中转)
(2003-02-11 20:40:36) DELPHI-FANS
恩,对,我有一个代码是用文件映射写的,对尾部的情况考虑的还不错,
他是用一个和搜索字符串长度小一的字符串来保存上个缓冲区的尾巴,在下一个缓冲区开始的头部加上去,再进行扫描,
(2003-02-11 20:42:19) DELPHI-FANS
如果要用KPM匹配算法那就更麻烦了
(2003-02-11 20:43:02) tseug
呵呵, 当然了, 不过也不复杂, 你刚才说的那个办法就可以, 先局部用KPM检索
(通过服务器中转)