#2
老去的流星雨2024-02-20 08:04
|
CURSOR表在哪里存放由于没有权威的明确说明,VFP业界大师们时常讨论,有说在内存的,有说在磁盘的,还有说数据量小时在内存,大时转磁盘。老车认为CURSOR表必须在磁盘,理由如下:
一、首先要确定CURSOR表的主要作用是什么。老车认为CURSOR表主要是为作为远程表与VFP的链接表(也叫视图)而设计的。老车在学用CA 与SQL 时发现、用CA从远程SQL检索到VFP中的视图,也就是CURSOR表,与SQL中的源表结合的相当牢固,老车曾经设想需要切开时随时切开,需要链接时随时链接,然而花了几天时间都切不开,至今也没能切开,觉得除非退出VFP、断电或拨下网线,否则无法切开。说这些老车是想说明作为视图的CURSOR表与远程SQL中的源表结合是相当紧密复杂的,怎么可以忽而内存忽而磁盘的随时折腾呢?还有数据在内存与磁盘的存放方式应该是不同的,关联方式也就不同,来来回回折腾需要改变链接方式,必然是很要命的;还有正在折腾时发生断电等导致数据表损坏的机率徒增,且很难预防和处理;还有计算机操作都是瞬息万变的,总是那么来来回回折腾不仅费机时,判断也是很累的。如果是老车编写VFP不会那么整的。
二、我们都知道电脑内存或VFP所能管理的内存是有限的,不足以容纳特大的SQL源表,而磁盘对操作SQL数据表而言可以视为足够大,所以VFP不会将CURSOR表放在内存,而要放在磁盘。
三、CURSOR表不作为SQL等远程源表的视图,而作为VFP自身数据载体只是该表的附属功能,VFP不会因附属功能而另设计存放方式的。并且如果放入内存,也同样存在内存容量不足来回折腾的问题。
四、用 DBF() 函数获取的CURSOR 表所在位置无一不在磁盘更能说明问题,也不知道为什么DBF() 获取的位置明明是在磁盘上,还有硬说在内存的。
五、 CURSOR 关闭就没有了,在机子里总是找不到CURSOR是因为VFP有删除它的机制,关闭时删除、退出VFP删除、启动VFP删除。想象一下CURSOR作为远程SQL源表的视图,该表关闭后再打开,远程SQL源表是否可能发生变化,这个表再打开还能用吗,保留它不就垃圾吗?老车也见样学样、学着VFP专门设了一个存放垃圾文件的文件夹,可能成为垃圾的表就往那个文件夹放,每当软件退出与重启都清理一下那个文件夹。
可能也会有说讨论这个没意义,CURSOR保存在哪不关我的事,其实是有意义的。之前老车认为CURSOR在内存运行速度能快些,还不产生垃圾,有时宁可舍去某种功能、例如CURSOR表不能PACK也绕着用它。自认定CURSOR在磁盘运行速度不会快,若再因此舍去功能用它就不划算了,所以除作为远程SQL源表的视图,CURSOR表的应用就减少了。
以上仅是老车个人观点,也无真凭实据,欢迎持不同观点的大师提反面意见,但也要说出一、二、三、……道理,不可简单的只说就是就不是。
[此贴子已经被作者于2024-2-19 21:33编辑过]