当前位置: 代码迷 >> VFP >> .FPT备考文件突然变很大
  详细解决方案

.FPT备考文件突然变很大

热度:2753   发布时间:2013-02-26 00:00:00.0
.FPT备注文件突然变很大
我的一个数据表,附有一个.FPT备注文件,本来是5MB左右,有一天变成了800多MB,天啊,
这是什么回事?有谁知道原因吗?
------解决方案--------------------------------------------------------
本帖最后由 apple_8180 于 2012-11-08 12:29:37 编辑
用命令: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文件的大小增加会慢一些。
------解决方案--------------------------------------------------------
pack MEMO 


Removes unused space from the memo file but does not remove records marked for deletion from the table. Information in memo fields is stored in an associated table memo (.fpt) file, which as the same file name as the table. 

尽量不使用FPT,容易出问题
  相关解决方案