F Frank Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-07 #1 我用blockread读文件,感觉还不是很快. 请大家谈谈提高速度的办法.
A amo Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-07 #2 呵呵, 这已经是最快的了, 看看是不是你的代码有什么问题? 试试加大blockread所读记录的个数。
F Frank Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-07 #5 to amo: 数据结构如下: Type TMapinfo_map_head=record Verinfo:string[30]; bound0_x:integer; bound0_y:integer; bound01_x:integer; bound01_y:integer; No_of_region:integer; end; type Tmap_polygon=record No_of_point:integer; mapinfo_points:array of Tpoint; end; type TMapinfo_Map_region=record region_name:string[7]; No_of_region:integer; regions:array of Tmap_polygon; pen_define:string; brush_color:string; Center:string[10]; center_x:integer; center_y:integer; end;
to amo: 数据结构如下: Type TMapinfo_map_head=record Verinfo:string[30]; bound0_x:integer; bound0_y:integer; bound01_x:integer; bound01_y:integer; No_of_region:integer; end; type Tmap_polygon=record No_of_point:integer; mapinfo_points:array of Tpoint; end; type TMapinfo_Map_region=record region_name:string[7]; No_of_region:integer; regions:array of Tmap_polygon; pen_define:string; brush_color:string; Center:string[10]; center_x:integer; center_y:integer; end;
A amo Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-07 #6 唔,结构比较复杂。 这样的话用Blockread的优势不大。 不过还是可以利用的: 1。 type Tmap_polygon=record No_of_point:integer; mapinfo_points:array of Tpoint; end; 中的mapinfo_points 2. type TMapinfo_Map_region=record region_name:string[7]; No_of_region:integer; regions:array of Tmap_polygon; ... end; 中的regions都需要读吧。 可以用blockread处理: p: Pointer; p:=regions; Dec(PLongint(p)); Length := PLongint(p)^; 再用lenght为长度读regions的内容。 mapinfo_points可同样处理。
唔,结构比较复杂。 这样的话用Blockread的优势不大。 不过还是可以利用的: 1。 type Tmap_polygon=record No_of_point:integer; mapinfo_points:array of Tpoint; end; 中的mapinfo_points 2. type TMapinfo_Map_region=record region_name:string[7]; No_of_region:integer; regions:array of Tmap_polygon; ... end; 中的regions都需要读吧。 可以用blockread处理: p: Pointer; p:=regions; Dec(PLongint(p)); Length := PLongint(p)^; 再用lenght为长度读regions的内容。 mapinfo_points可同样处理。
A amo Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-07 #7 呵呵,错了一点, 上面的方法只能用于写, 要从文件中读的话, 最好在 Tmap_polygon中加入point_number TMapinfo_Map_region中加入regions_number字段, 以便处理。
呵呵,错了一点, 上面的方法只能用于写, 要从文件中读的话, 最好在 Tmap_polygon中加入point_number TMapinfo_Map_region中加入regions_number字段, 以便处理。
J Jams Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-07 #8 设置Config.sys 将Emm386.exe的D参数设的大一点即可。
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-08 #11 这个结构很难读写. 很多record的内容不能直接读出或写入, 只能自己处理, 比如: TMapinfo_Map_region中的 pen_define:string; brush_color:string 这两个都读不出, 只能自己处理(在record中不定长的string只保存了一个指 针指向具体的string, 所以它们的长度都是4字节--32bit, 直接读写只能得到 无效的数据).
这个结构很难读写. 很多record的内容不能直接读出或写入, 只能自己处理, 比如: TMapinfo_Map_region中的 pen_define:string; brush_color:string 这两个都读不出, 只能自己处理(在record中不定长的string只保存了一个指 针指向具体的string, 所以它们的长度都是4字节--32bit, 直接读写只能得到 无效的数据).
A amo Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-08 #12 eYes说的是, string类型的数据应改为array [0..n] of char; 或用string再加上个表示字符串长度的字段,主要是方便读。
Z ZRY Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-15 #14 可以试一下内存映像文件(Memory Mapped File),将要读的文件映像到 内存中,然后就可以用操作内存的方法访问该文件。 (没比较过速度, 应该会快一些吧,Windows中都是用这种方法把EXE载入内存的。)
可以试一下内存映像文件(Memory Mapped File),将要读的文件映像到 内存中,然后就可以用操作内存的方法访问该文件。 (没比较过速度, 应该会快一些吧,Windows中都是用这种方法把EXE载入内存的。)