| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 932 人关注过本帖
标题:老车认为CURSOR表在磁盘
取消只看楼主 加入收藏
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:6 
老车认为CURSOR表在磁盘
  ___2021年10月17日

  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编辑过]

搜索更多相关主题的帖子: 内存 CURSOR VFP 磁盘 SQL 
2024-02-19 21:29
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
收藏
得分:0 
是的,那个临时文件夹在磁盘上,不是在内存。
2024-02-20 09:35
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
收藏
得分:0 
欢迎 4-6 楼 kangss大师的认真讨论!也欢迎更多大师参与讨论!老车不怕被驳倒,甚至希望被驳倒,能讨论清楚狐友们共同有收获就好。
2024-02-20 11:24
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
收藏
得分:0 
猜想:VFP在处理DBF表或CURSOR表的某些过程中、如某条记录的某字段值、某条记录、再扩大一点也可能将表中记录分批放入内存处理,或者说必须放入内存处理是合乎逻辑的。但如果将表的数万、数十万百万千万,甚至上亿条记录都放入内存处理,老车觉得这不是VFP的强项,VFP的强项是处理DBF表,也就是猜想VFP不会那么整。
老车编程非常喜欢用数组,甚至可以说用的走火入魔。有大师说方法不好,因为数组用多占据内存。那么编程用的数组与可能上亿条记录的CURSOR表放入内存,谁更占用内存呢?
2024-02-20 12:04
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
收藏
得分:0 
老车只能认为这是将 temp 存到 C:\USERS\ADMINI~1\APPDATA\LOCAL 文件夹了,如果说还是在内存理解不了了。
图片附件: 游客没有浏览图片的权限,请 登录注册
2024-02-20 18:14
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
收藏
得分:0 
2024-02-20 19:35
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
收藏
得分:0 
以下是引用kangss在2024-2-20 19:19:31的发言:



重新启动一个干净的VFP,执行以上代码,看看有没有“0000QHAH0030.TMP”在硬盘上?


windows有“重定向”功能,你看到的“我的文档”“我的电脑”“我的图片”,事实上文件夹名称并不是这些汉字

虽然你执行“SELECT ... 0000QHAH0030.TM”成功,但它并不是从“C盘”上读取的。你可以看看“0000QHAH0030.TMP”在不在C盘
kangss兄弟暨家人过年好!
以上老车之言也都是个人认识,无任何真凭实据,觉得这个议题应该很难讨论清楚,建议打住!
在2024年新年之际能与兄弟认真友好的讨论议题深感荣幸,我们多楼的讨论无任何互相 贬低、攻击 之言,更无人身攻击之语,难能可贵。体现了兄弟为人平易友好,老车愿与兄弟交朋友,欢迎以后更多讨论议题,互相学习、互相帮助、共同进步。

[此贴子已经被作者于2024-2-21 19:42编辑过]

2024-02-21 19:29
快速回复:老车认为CURSOR表在磁盘
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020533 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved