用C#/.NET挑战一下VFP
我发现在这里有很多VFP爱好者见不得一点儿VFP的"坏话",我的分数也没什么用处,就出200分挑战一下VFP,看看C#/.NET与VFP对抗一下,各自优劣在哪里。
目的:让VFP爱好者/程序员更清晰的认识VFP的优点和劣势,而不是对其过于迷信。
范围:不限,但不要故意刁难。
方式:一段VFP代码对一段C#代码。
个人观点:C#/.NET强大,VFP简易快捷。
我是一个老Fox程序员了,对FoxBase/FoxPro/VFP了解的比较透彻,但C#/.NET方面只做了不到2年,算是比入门水平高一点的样子,不过在VFP能做到的功能,我用C#在.NET上基本都能实现或者基本都了解如何实现。
不是吵架贴,也不是比较谁好谁坏,所以不要在这里做这种评价了。
[解决办法]
每种开发工具及语言都各有千秋,没有万能的。我同意 Foxer 的观点“C#/.NET强大,VFP简易快捷”(虽然我对C#/.NET不熟)
说明一下:
那个帖子是我锁定的,目的是怕再回复下去容易产生矛盾,其实谁都没有错,大家只是实际说出自已的经验而已。
就像现在孩子上幼儿园一样,有的家长认为孩子应该以玩、娱乐为主,有的家长认为孩子应该以学习为主,
如果某班老师注重学习,就会得出两种说法:
1、有些家长说这个幼儿园太注重学习了,造成孩子压力太大。
2、有些家长说这个幼儿园不错,注重学习。
如果某班老师注重娱乐,就又会得出两种说法:
1、有些家长说这个幼儿园不太注重学习,这个幼儿园不好。
2、有些家长说这个幼儿园不错,孩子爱去,孩子开心。
这个例子虽然不恰当,不过也说明一个问题,其实谁都没有错,老师家长都希望孩子好,只是不同的环境、看法而得出不同的结论。
[解决办法]
我来出题:
题目:由我自己编写一程序,显示1+2。结果:VFP以100:0完胜。因为我对C#一点不会,得0分。
[解决办法]
如果是中小型数据库,限制开发时间肯定是VFP快了,楼主最好限定个条件什么的,不然各自都有相对占优的领域
[解决办法]
还是apple_8180 版主说的好!无需争长短!
[解决办法]
.NET与传统开发工具在相同算法下得的结果效率比较慢
[解决办法]
这里能看出VFP的优势之一:单一平台即可完成完整的开发工作。当然.NET平台庞大,但功能也多,覆盖面非常广泛。.
顶此句。
[解决办法]
呵呵,关注那个帖子比较久了,没有发言,因为大多数使用VFP的人似乎对VFP的语言
功能比较感兴趣,对数据库功能很少讨论,而我在3年前已经转向数据库了,说实话,
VFP在数据库功能方面与其它数据库相比,差得太多了(触发器、SP、数据库事件、
网络支持、稳定性、安全性等等 )。
就个人观点:每一种语言都有自己的长、短处,合理运用才是正道,VFP不是万能的,
不是什么(环境)用途都可以用的,C#也一样。
[解决办法]
我的经历和楼主一样,观点也一致,没什么好讨论的。
[解决办法]
小可学用 vfp9 只不过半年,汗一个,至今什么系统也没做出来,很是惭愧。很想学学别人或者别的开发语言都是如何开发一个系统甚至于系统内的每一个组成部件的。窥见楼主学 C# 都2年时间了,相信楼主做出很多东西与部件出来了吧?放几个出来让小可学学?当然了,如果楼主所有的部件及其源代码均都涉及到商业机密、公司秘密、个人隐私,或皆属可望不可及的高端产品不涉及低端产品与一般应用,小可也是断不敢强人所难的。
[解决办法]
好玩,有意思
我是强力支持VFP的
[解决办法]
个人观点,没什么可比的。
如果是业余则由个人喜好决定的。
如果是职业则由职业决定的。
真正如果你想做分析则,则简单的方法是你应该知道什么时候用.net什么用VFP,或者什么时候应该选取ACCESS,什么时候要推荐Oracle.
类似之争太多.
.Net vs J2E
Oracle vs MS SQL
Windows vs Linux
最终能决定的是 f(允许的钱,你掌握的技术,时间,业务需求) -> 方案 , 也就是说如果你只会一种技术,那你只能提供一种方案。
[解决办法]
foxpro还自带数据库的......c#编个数据库??哈哈
c#+access vs foxpro??
c#+sql server vs foxpro??
[解决办法]
C#+XML vs foxpro
嘿嘿。
[解决办法]
C#+XML vs foxpro
建议这个提法改变 : C# + 微软 VS FoxPro
[解决办法]
很好,很强大。等哪天有空咱们也整个 ACCESS vs VFP
C#和VFP根本没有可比性,一个是编程语言,一个是 (数据库+开发语言+IDE)
要比只能这样比 (C#+VS2008|VS2008+SQL server|Oracle|Access) vs VFP
ACCESS倒是满足这种要求
(关系数据库+VBA+VBE开发环境)
[解决办法]
C# + SQL_Server VS VFP
------解决方案--------------------
VFP本身没什么问题,但是我接过垃圾VFP程序员写的垃圾VFP程序
一个医院的数据库,每天建一个表,每个表是一个文件,我靠,查询半年的数据耗费几分钟,郁闷死了.
我想VFP也没规定这样设计数据库吧?
违背了数据库设计的原则.
是某些人害了VFP
[解决办法]
看来我的 vfp9 是盗版我确定,我的机器配置与楼主一致。
我尝试与楼主一样的代码如下:
int lnIndex = 0
While (lnIndex < 100000000)
{lnIndex = lnIndex + 1;}
我的盗版 C# 下执行没什么感觉,0.1秒都不到,10亿次时,也不过0.5秒。
我的盗版 vfp9 执行时就惨了,1亿次就需要30秒左右。
[解决办法]
死守vfp有什么好?难道你真的没能力去接受一门新技术了?
[解决办法]
int lnIndex = 0
While (lnIndex < 100000000)
{lnIndex = lnIndex + 1;}
用w32dasm或者ollydbg看看这段c#代码对应的汇编代码.
看看c#编译器有没有将这段代码优化成类似以下c#代码段对应的汇编
if (lnIndex < 100000000)
lnIndex = 100000000
endif
或者
lnIndex = 100000000
有可能不是实际进行1E次循环.
[解决办法]
技多不压身,没必要象宗教一样信仰某个东西.
啥都会最好.
[解决办法]
VFP的代码效率是肯定不如c#的,运行机制不一样的 但是不能因为一个1亿的循环,就决定了.net运行效率比VFP 高10到100倍。你可以试一下在循环里加个trim ("sfdsfsfsf "),看看还能快那么多吗?如果在加更多的代码呢,VFP优势是在函数和命令,这些才是的C写的东西,你叫VFP解释一亿次运行,那肯定是速度不行,不过动态语言能得到这个程度已经非常非常的优秀了。VFP优势不是dbf,而是有rushmore 和cursor 的sql 引擎包括一堆高效率的C写的函数和命令,还有动态解释机制,这些才是VFP优秀的地方。
极限测试意义不是很大,需要处理1E循环的应用的需求几乎没有,一般这样大循环的应用对数据库发出指令来个update 而已,这个和前台工具就没有关系了 。
我们需要比较测试运行性能,
比如表单打开速度(放200个控件,比一下),
对于cursor,插入10万的记录(比一下速度)
对于cursor数据 的快速统计(搞个10W记录,统计一下平均,最大,最小)
对于cursor数据 的快速检索(rusnmore 技术,seek ,locate for )
对于cursor数据 的再sql 能力(有foxer 说很像sql 2000的)
可以这样说,对于数据库类的应用,VFP胜任任何规模级。
还可以用fll或com来弥补的VFP在某些方面处理效率缓慢的问题,有些foxer 这方面已经作出了很大的成果,只是没有公布而已。
对于大部分foxer 面临的问题是:
1.界面组件的缺乏
2.b/s
3.unicode
4.移动或PDA应用
5.多线程
当然对某些foxer (^-^)来说,这又不算问题,他们有自己的解决方法,没有公布而已。
[解决办法]
花了4.5个人,用了4个月时间,就是18人月吧,去尝试c#,花不少钱和时间啊。
得出几个很好的结论:(从WIN FORM 角度)
(1)c#的类应用方面,还相当菜,达到不VFP 一半的水平
(2)DOT NET平台,其进化的方向,重点之一是动态性。而DLR在07年4月出来后,还未落到实处,等vb10吧。
(3)c#的动态性,相当的差,明明是解释性的语言,装什么A+1啊,太令人生气了。
(4)VFP的前端引擘速度极快,使用极便利,C#等望尘莫及,只能痛苦的爬行了。
(5)DOT NET内部过渡技术一大堆,微软的风格,唉,死性不改,巴尔莫,等着下台吧。
(6)以后招人,可以招C#新手,迫他用VFP。自会就范,只是一种SCRIPT嘛,在我们framework之下,写一些script来
完成工作,还是很自然的,只是SQL语句、类接口和部分效率很高的SCRIPT。
(7)开发团队:核心是老狐狸,外围为C#新手,还是可行和经济的。前提是,我们已有成熟framework.
(8)转向DOT NET的时机,还是等DLR在DOT NET上实用化了,DOT NET的动态性追上VFP了,再转,
估计要2-3年吧。真慢。
(9)以VFP开发管理软件,几年内是足够的。 管理思想 > 表现形式 > 开发工具。开发工具属末流,如果为了
追一个名远大于实的新潮,舍本而逐末,那我恭喜你,我又少了一个竞争对手。
[解决办法]
[解决办法]
印象中的:
c#->IL->CLR运行时解释 .不象C编译成机器码.
vb是不是解释性语言 ,java是不是解释性语言?
[解决办法]
10多年前就开始用fox做财务软件了,2000年开始就转向asp,真不知道现在还有人用它做商业系统,好像fox已经不在VS中了。在网络发展的今天,它如果解决了B/S的问题,还是非常好的。
[解决办法]
我前面说过,DBF不是优势
作大项目当然要和oracle 结合,两手都要抓,两手都要硬!
那就对比一下,ado.net的 DataTable和VFP的cursor对比
CLEAR
t=SECONDS()
CREATE CURSOR t1 ( id i ,code c(20),je n(12,2))
RAND(0)
FOR i=1 to 1000000
INSERT INTO t1 VALUES ( i,'mycode'+TRANSFORM(i),RAND())
ENDFOR
?'插入记录:'+TRANSFORM(SECONDS()-t) &&5秒完成
t=SECONDS()
SELECT MAX(je),MIN(je),SUM(je) FROM t1 INTO CURSOR t2
?'统计最大最小和:'+TRANSFORM(SECONDS()-t) &&3秒完成
t=SECONDS()
SELECT t1
LOCATE FOR code='mycode1000000'
?'不建索引查找:'+TRANSFORM(SECONDS()-t) &&7秒完成,没有索引
t=SECONDS()
SELECT t1
INDEX on code TAG code
?'建索引消耗时间:'+TRANSFORM(SECONDS()-t) &&13秒完成
t=SECONDS()
SEEK 'mycode1000000'
?'建索引后查找:'+TRANSFORM(SECONDS()-t) &&0.000秒
[解决办法]
其实没什么好讨论的,Foxpro已经停止新版本的开发了,退出历史舞台是迟早的事
[解决办法]
性能是王道,如果性能高没有人会说它复杂
如C++/C/汇编,Delphi,VFP,PB...................
[解决办法]
[解决办法]
我C都不懂,更别说Java/C++/C#了,有一个原因是受不了那大小写敏感,另外就是难学的语法、概念等。
C当时的环境有情可原,一切为了速度、为了省内存。可到了21世纪还有这变态的规定就有点不明白了。竟然XML都是大小写敏感的,这个推出并不是很早呀。(虽然一些系统有是否大小写敏感的开关,但毕竟语言规定是敏感的)
C之类的东西就是为了底层软件而出生的,许多特点都是为了速度、内存而规定的,根本就没考虑用户学习的难度等因素。再怎么变,永远没VB那么简单。
本人的怪观点(在别处挨过砖头,欢迎砖头再来):MS的成功在于VB,而Linux的失败(虽没死亡,几年的发展离期望太远了)在于什么都学C。
VB/VFP可以拉住好多非计算机专业人士,C可让好多人也因难而离去。
VB/VFP再怎么不好,是下里巴人,人人可学;C类是阳春白雪,不是人人能学的。
不管VFP是否淘汰,反正C#我是不会学的,要学也是学点VB.NET而已。人都老了,没精力了呀。
[解决办法]
[解决办法]
locate for 比较方式是有问题的,影响了性能
再优化一下,继续
CLEAR
CLOSE DATABASES all
t=SECONDS()
CREATE CURSOR t1 ( id i ,code c(20),je n(12,2))
RAND(0)
FOR i=1 to 1000000
INSERT INTO t1 VALUES ( i,'mycode'+TRANSFORM(i),RAND())
ENDFOR
?'插入记录:'+TRANSFORM(SECONDS()-t) &&5秒完成
t=SECONDS()
CALCULATE MAX(je),MIN(je),SUM(je) TO a,b,c
*SELECT MAX(je),MIN(je),SUM(je) FROM t1 INTO CURSOR t2
?'统计最大最小和:'+TRANSFORM(SECONDS()-t) &&2秒完成
t=SECONDS()
LOCATE FOR LIKE ('mycode1000000*',code)
?'不建索引查找:'+TRANSFORM(SECONDS()-t) &&0.5秒完成,没有索引
t=SECONDS()
SELECT * FROM t1 WHERE code like '%1000%' INTO CURSOR t3
?'不建索引模糊查找:'+TRANSFORM(SECONDS()-t) &&0.5秒完成,没有索引
t=SECONDS()
o=CREATEOBJECT('grid')
o.RecordSource='t1'
?'网格绑定消耗时间:'+TRANSFORM(SECONDS()-t) &&0.000秒完成,没有索引
[解决办法]
插入数据和排序性能方面,c#已经输了
看上面的代码 ,继续检索和数据展示性能方面的PK
VFP的函数和命令是C写的,理论上不应该输的
locate for 是有问题,即使在rushmore的情况下,也比seek 慢的多
主要是比较方式没有优化好,这是foxer使用要注意的地方
------解决方案--------------------
[解决办法]
LOCATE FOR LIKE ('mycode1000000*',code)
我只是改变了一下比较方式,目的和
LOCATE FOR code="mycode1000000"
是一样
从这些代码例子
比较起来,大家可以看到VFP代码的简洁,易懂
[解决办法]
我也曾经用VFP6.0做过一个10万级的项目,全部是个人开发,感觉VFP速度确实很不错,特别是索引的使用,C#也做过些项目,不过对比倒没比过,看了高手们的文章,感觉学了不少东西,按我的感觉VFP是控件少了点,比如说我要用treeview控件的话还要用activeX的,一些高级功能实现不了,.net中的treeview功能强大不少。不过要是开发百万记录以下的项目,VFP我还是感觉最合适的。
[解决办法]
[解决办法]
继续
t=SECONDS()
UPDATE t1 SET je=je+10000
?'更新je字段:'+TRANSFORM(SECONDS()-t) &&1秒完成
t=SECONDS()
COPY TO d:\t1
?'存为本地:'+TRANSFORM(SECONDS()-t) &&0.5秒完成
[解决办法]
从这些测试可以看出
数据处理效率方面
VFP还是非常不错的
VFP代码处理起来书写效率更高,更简洁,更有力,更容易让人理解
何况还有一个本地的DBF 随手可用
.net 没有一个本地数据引擎,可以选择access或别的例如sql server等作为本地数据引擎
但是把100W记录插入本地access或sql server表,等待S机吧
VFP 2秒内基本就差不多
我这里说本地数据引擎,不是服务器数据库
这确实是VFP优势的地方
当然还有更重要的解释机制
这个不好用代码来说话
VFP几乎所有的文件都可以不需要编译在exe里就可以运行
比如vcx,scx,fxp等
这个在客户化个性化的时候非常的有用
VFP几乎所以的表达式的地方都可以是任意的一段脚本,而且无缝的衔接到系统
甚至VFP的整个IDE环境(不超过10m)都打包和应用程序一起发布,可以直接在现场给用户客户化
这个好处是可能是别人难以体会
java开发者在搞自己的平台,.net开发者也在搞自己de 平台
他们需要都在开发自己的IDE环境,他们开发出IDE环境怎么能跟原生的比呢
无论是客户还是实施还是开发,我们可以在一个平台下工作
既可以零代码的配置完成任务(客户和实施),又可以独立的编制插件然后给客户和实施零代码的复用,
这就是VFP的非常好的特点
[解决办法]
意淫一下.
有没有必要查一下linq的开发组是那些人,呵呵.linq效率不低 ,是不是原来vfp开发小组的.
微软就老干这事....ado ,ado.net 的开发组里面就是从vfp开发小组中调人过去.
vfp处理数据方面有很多秘籍,技巧 ,国内很多vfp的书都没提到.包括最近的张洪举vfp9系列.