| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 910 人关注过本帖
标题:老车认为CURSOR表在磁盘
只看楼主 加入收藏
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:45
专家分:6
注 册:2016-5-12
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:16 
老车认为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: 2
等 级:论坛游民
帖 子:24
专家分:57
注 册:2023-9-9
收藏
得分:0 
不用怀疑,用DBF('CURSOR名')可以知道是在临时文件夹里
2024-02-20 08:04
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:45
专家分:6
注 册:2016-5-12
收藏
得分:0 
是的,那个临时文件夹在磁盘上,不是在内存。
2024-02-20 09:35
kangss
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:273
专家分:604
注 册:2014-6-12
收藏
得分:10 
图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册
2024-02-20 10:13
kangss
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:273
专家分:604
注 册:2014-6-12
收藏
得分:0 
回复 2楼 老去的流星雨
有“临时文件名”,不一定“真实存在”
还有一个“虚拟内存”,硬盘“仿真”的内存
2024-02-20 10:15
kangss
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:273
专家分:604
注 册:2014-6-12
收藏
得分:0 
以下是引用惬意_甬车在2024-2-20 09:35:53的发言:

是的,那个临时文件夹在磁盘上,不是在内存。

图片附件: 游客没有浏览图片的权限,请 登录注册
2024-02-20 10:18
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:45
专家分:6
注 册:2016-5-12
收藏
得分:0 
欢迎 4-6 楼 kangss大师的认真讨论!也欢迎更多大师参与讨论!老车不怕被驳倒,甚至希望被驳倒,能讨论清楚狐友们共同有收获就好。
2024-02-20 11:24
kangss
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:273
专家分:604
注 册:2014-6-12
收藏
得分:0 
“数据量小时在内存,大时转磁盘”可能是我说的,这是由windows内存管理机制自动控制的。
当内存不足时,windows会把当前“物理内存”中的部分数据转存到“虚拟内存”中,虚拟内存是硬盘上的文件Pagefile.sys,转存的不是“表”是“内存”。

就像笔记本合盖之后的休眠,windows会把内存、包括打开的各个软件、各个窗口界面等信息保存到Hiberfil.sys文件中,当再次打开系统时候,windows把Hiberfil.sys加载到内存中,开机后的界面跟之前合上笔记本盖子的界面“一模一样”
2024-02-20 11:35
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:45
专家分:6
注 册:2016-5-12
收藏
得分:0 
猜想:VFP在处理DBF表或CURSOR表的某些过程中、如某条记录的某字段值、某条记录、再扩大一点也可能将表中记录分批放入内存处理,或者说必须放入内存处理是合乎逻辑的。但如果将表的数万、数十万百万千万,甚至上亿条记录都放入内存处理,老车觉得这不是VFP的强项,VFP的强项是处理DBF表,也就是猜想VFP不会那么整。
老车编程非常喜欢用数组,甚至可以说用的走火入魔。有大师说方法不好,因为数组用多占据内存。那么编程用的数组与可能上亿条记录的CURSOR表放入内存,谁更占用内存呢?
2024-02-20 12:04
chychychy
Rank: 2
等 级:论坛游民
帖 子:287
专家分:98
注 册:2015-4-18
收藏
得分:0 
2024-02-20 16:11
快速回复:老车认为CURSOR表在磁盘
数据加载中...
 
   



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

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