用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开发管理软件,几年内是足够的。 管理思想 > 表现形式 > 开发工具。开发工具属末流,如果为了
追一个名远大于实的新潮,舍本而逐末,那我恭喜你,我又少了一个竞争对手。
[解决办法]
那就对比一下,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...................
[解决办法]