| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1460 人关注过本帖
标题:老车认为CURSOR表在磁盘
只看楼主 加入收藏
老去的流星雨
Rank: 2
等 级:论坛游民
帖 子:24
专家分:57
注 册:2023-9-9
收藏
得分:10 
以下是引用kangss在2024-2-20 10:15:15的发言:

有“临时文件名”,不一定“真实存在”
还有一个“虚拟内存”,硬盘“仿真”的内存


表肯定是在内存中缓存的,查询cursor应该是从内存,数据库都有缓存机制,但是数据是写入磁盘的

CREATE CURSOR temp(test C(10))
INSERT INTO temp (test) values('aaa')
_cliptext = DBF('temp')
SELECT * FROM C:\USERS\ADMINI~1\APPDATA\LOCAL\TEMP\0000QHAH0030.TMP
2024-02-20 17:16
惬意_甬车
Rank: 1
等 级:新手上路
威 望:2
帖 子:48
专家分:6
注 册:2016-5-12
收藏
得分:0 
老车只能认为这是将 temp 存到 C:\USERS\ADMINI~1\APPDATA\LOCAL 文件夹了,如果说还是在内存理解不了了。
图片附件: 游客没有浏览图片的权限,请 登录注册
2024-02-20 18:14
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:342
专家分:807
注 册:2014-6-12
收藏
得分:0 
以下是引用老去的流星雨在2024-2-20 17:16:26的发言:



表肯定是在内存中缓存的,查询cursor应该是从内存,数据库都有缓存机制,但是数据是写入磁盘的

CREATE CURSOR temp(test C(10))
INSERT INTO temp (test) values('aaa')
_cliptext = DBF('temp')
SELECT * FROM C:\USERS\ADMINI~1\APPDATA\LOCAL\TEMP\0000QHAH0030.TMP


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

图片附件: 游客没有浏览图片的权限,请 登录注册

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

虽然你执行“SELECT ... 0000QHAH0030.TM”成功,但它并不是从“C盘”上读取的。你可以看看“0000QHAH0030.TMP”在不在C盘
2024-02-20 19:19
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:342
专家分:807
注 册:2014-6-12
收藏
得分:0 
以下是引用惬意_甬车在2024-2-20 18:14:58的发言:

老车只能认为这是将 temp 存到 C:\USERS\ADMINI~1\APPDATA\LOCAL 文件夹了,如果说还是在内存理解不了了。


你要在这个文件夹里面找到那个文件,才能证明它不在内存
2024-02-20 19:22
惬意_甬车
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
shenlancwz
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:70
注 册:2018-11-7
收藏
得分:0 
路过
2024-05-01 21:40
hsfisher
Rank: 2
等 级:论坛游民
帖 子:75
专家分:36
注 册:2009-4-26
收藏
得分:0 
学习了
2025-06-30 08:15
nikon
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2021-4-19
收藏
得分:0 
首先,车同学理解的CURSOR表本身就有偏差,导致后续的理解不正确,CURSOR表是临时表,用作远程表和链接表只是一方面的应用,但是他本身是当做临时表存在的。
临时表的使用范围很广,主要用于过渡表,机制就是先在内存产生,然后在磁盘镜像,使用临时表的好处就是不用考虑表放在磁盘的哪个位置,后续怎么处理,全部交给vfp本身。
如果程序是配合远端数据库使用的话,那尽量用临时表,这样就可以做到“片叶不沾身”的效果,也可以实现多开客户端的功能,如果过渡表是使用dbf的实际表,那多开客户端首先就面临实际表冲突的可能,当年我不会使用临时表的时候,为了能多开客户端,着实为了处理这个实际表头疼了一阵。
临时表确实好用,而且确实存在于内存,这个在内存的开销中可以很容易的看出来,做个简单的实验就可以:开100个各自含有1万条数据的临时表和开100个各自含有1万条数据的dbf所使用的内存开销是不一样的。
实际上,数组也是一个表,和临时表性质是一样的,只是运作机理略有不同,数组是foxpro从c那边学来的。
虽然vfp已经老旧,好多东西不支持,但为什么好用,就是3大法宝:
1.本身有数据表(table)不像c没有,只能使用数组,或者干脆去远端操作数据库。
2.本身支持sql语言,虽然和mssql略有不同,但是谁能说mssql就是标准了?mysql和oracle就不同意。你可以直接在本地欢乐地使用sql语言操作数据,不用去远端搞,要知道以现在的pc性能,好多小数据处理可以直接在本地弄的。
3,支持各种api,fll,ocx,甚至多任务多线程,而且嵌合度比较高,使用起来很顺滑,可以弥补自身老旧的问题。
总之,小小临时表的设计就可以知道当年微软大哥是想把他搞大的,然而后来发现sql更香。前后差了2年就发现sybase更好谈,fox这边太执着,所以就放弃使用vfp搞大型数据库了呗,但是vfp好用是事实,所以微软也是很良心的给vfp留了很多的财富。

[此贴子已经被作者于2025-7-17 00:17编辑过]

收到的鲜花
  • laxjyj前天 17:09 送鲜花  1朵  
前天 00:15
快速回复:老车认为CURSOR表在磁盘
数据加载中...
 
   



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

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