我的表文件采用通用字段存放了一些PDF文件,但近来发现备注文件特别大,可达好几百MB,但实际文件并没有这么大,不知道什么原因,有没有什么办法可以减小备注文件?
我采用PACK memo之后,有些文件减小了一些,但还有很多没有减小的,不知道有没有更好的办法?
------解决方案--------------------------------------------------------
*备注文件(.FPT)的“瘦身”方法
*------------------------------------
我有一小小程序,其中一表有四个备注字段,主要是对备注字段进行操作,可运行了一段时间后,发现FPT文件巨大得恐怖,达几百兆,其实我的备注内容实际文本加起来也不可能超过一兆的,这是为何?
-------------------------------------
用命令:PACK MEMO
参数
MEMO
从备注文件中删除未使用空间,但不从表中删除标有删除标记的记录。(即只对备注字段处理)
从而达到备注文件“瘦身”的目的,有点类似ACCESS中压缩数据库的方法。
转自:Foxer(狐狸)
备注字段增加的根源在于VFP对于MEMO字段的管理方式。
在VFP中,MEMO类型的字段时要求连续空间的,当你更改一条记录的MEMO字段内容,VFP将根据当前所占用的空间进行如下判断:1.现有空间(BLOCKSIZE*N)足够保存新的内容,则用当前空间,否则,把当前空间增加BLOCKSIZE设定的空间值,遗弃当前的空间,在FPT文件尾添加新的空间,而被VFP遗弃的空间VFP没有办法回收利用,所以,当你的MEMO字段内容更改频繁,且内容逐渐增加时,FPT文件会越来越大。
用COPY TO复制到新表的时候,VFP并非进行文件级复制操作,而是记录级操作,所以被遗弃的空间是不能复制到新表的,也就是复制后的新表中是没有被遗弃的那部分空间,所以就变小了。
而当使用 pack (MEMO)命令时,Visual FoxPro 把所有没做删除标记的记录复制到一个临时表(temporary table)中。执行完 pack 命令后,Visual FoxPro 把原表从磁盘上删除,同时用原表名命名临时表,这个过程就执行复制的过程,所以会变小。
因此,让FPT增加速度减缓的方法就是设置较大的BLOCKSIZE(SET BLOCKSIZE TO 64为默认值),这样,每个MEMO记录浪费的空间会增加,但VFP申请新的空间频率减小,总的来说,FPT文件的大小增加会慢一些。