WPF与WINFORM的选择

微软曾经对WPF(代号Avalon)抱很大的指望——新一代的华丽用户界面平台,一统Web应用和桌面应用,Flash杀手,尽管微软口头上不认可。几年下来,WPF确实实现了当初的预期的大部分功能,但离称霸软件开发领域还有不小的距离。不过,刚转到 WinForm上一两年的开发人员们都很困惑,WinForm究竟还有没有将来。微软只是模糊地说短时间内仍是WinForm,长期是WPF。想一想“维纳斯”,“TabletPC”,“Hailstorm”,“IE Channels”等等就知道这位老大的话不能全信。到底何去何从就仁者见仁智者见智了。html

英文开发社区内有句流行的话,叫“No silver bullet”,就是说没有万能,没有一个工具或方法能完美地解决全部的问题。一样这对WPF也适用。与其说WPF是WinForm的替代品,它更像DHTML和ASP.NET。夸张一点说,若是要给微软的技术画个家谱的话,DHTML就是WPF的直系亲属。WPF里的大量核心概念和结构,如属性引擎、事件模型等,都是继承自 DHTML,最大的一个不一样是外观和控件逻辑的分离。WPF应用和DHTML应用(HTA)的类似性也很是大,不一样点是WPF应用能够彻底脱离IE。也就是说,WPF和网页、ASP.NET、SVG是一套体系,能够比做XML版的Flash,而和WinForm彻底不一样。WPF的长项应该是网页式应用,固然它也能够用来作别的东西,就像Ajax能够作在线文本编辑器同样。程序员

也许有人还没据说过DHTML。DHTML即Dynamic HTML,是微软在90年代末在IE4里支持的扩展了的HTML,主要特征就是能够动态修改网页上对象的属性,并且具备相似Flash里的时间线,能够作动态的网页。缺点是难于开发和调试。后来主要被用来作翻转按钮。DHTML的一个页面集合和脚本资源一块儿能够打包成HTA应用,HTA应用能够在本机以及网络上使用。但从如今还有多少人记得DHTML就知道这东西没成才。api

回到WPF,WPF只在XP和Vista上有完整的支持,在其余平台和浏览器下,微软提供了WPF/E(开发代号)。WPF/E的程序是非编译的,就是说是发布源码的,和HTML加JavaScript同样。另外WPF/E目前只支持JavaScript。那么,WPF/E能用来作什么应用你们也就内心明白了。要在WPF/E和Flash间选择的话,只要想一想XML和压缩的二进制文件的区别就好了,如今几兆的Flash比比皆是,改用XML格式的话会有多大,诸位内心明白。不过要是个网页Form应用的话,WPF/E确实比Flash更强一些,不过有Ajax在,杀鸡未必要用牛刀。若是你的应用只支持XP 和Vista,那么你能够获得WPF的所有优点。浏览器

WPF有三种应用模式:应用、浏览应用、文档应用。应用就是通常的窗口应用,浏览应用就是象网页同样的一页一页的应用,文档应用是用来显示内容的浏览应用功能子集,而不是MVC模型。通常应用其实也就是每一个页面拥有一个独立的窗口。估计VB用户想到了当年的html控件,Delphi用户想到了 IntraWeb。简单的理解就是把WinForm界面换成了网页,固然这个网页的功能比HTML强得多,也复杂得多。网络

WPF是一套很复杂的体系,它的界面能够用代码生成,不过绝大多数人都会用XAML来生成。XAML能够认为是WPF的HTML。制定标准的人老是说 XML是可读的,但多数人认为它是用来给机器读的。XMAL基于XML,同时作了至关的扩展以弥补功能的不足。要手写XAML,必须了解WPF,了解 XML(namespace,link等等),了解XAML的规则,了解XAML扩展的语法,可以记住大量的标识符和引用关系。就像今天人们大多再也不手写 HTML同样,人们大多不会愿意去手写更复杂的XAML。并且按照微软的设计目标,WPF要将界面设计和程序逻辑分开,交给不一样的专业人员去作。也就是说,界面的设计是要交给美工的。相信我,找一个可以手写XAML的美工很难。微软为此提供了Expression系列软件,固然不是免费的。固然 VisualStudio里也有必定程度的支持,但这意味着由程序员来作灵活复杂的界面,更容易作出丑陋的界面;或者让美工来用 VisualStudio,功能有限并且有点昂贵。固然也可能有个不错的UI程序员,一箭双鵰;或者老老实实地作简单朴素的界面,之后有机会再找美工润色。编辑器

程序员都喜欢谈论速度。WPF是能够硬件加速的,在DirectX 9级显卡和安装了较新的驱动的状况下,WPF会获得部分或彻底的硬件加速。WinForm是基于GDI+的,没有硬件加速,只有v2.0里的非兼容模式下的文本是经过GDI加速的。因此,长远来讲,WPF有更好的性能。ide

那么如今回到最初的问题,WPF和WinForm,赌注该压哪一边。编辑器类程序是难以移植到WPF的,如World、Excel、 PowerPoint、Photoshop、IDE等。显示类和通常的商务类应用都是能够移植的,现有的Web应用都是可移植的。也就是说,WPF的应用范围和Ajax、Flash是有很大重合的,WPF的竞争力就是在和代码的集成上。随着Adobe加紧升级Flash的应用功能,一种可能的结果是WPF 和Flash压缩了Ajax的生存空间,WPF/E没有得到足够的支持,WPF成为Windows专用的应用,Flash做为跨平台方案存在。而对 WinForm程序来说,嵌入一些WPF内容是容易的。在WPF前途未卜的状况下,WinForm仍然是目前通常应用最稳妥的途径。工具


[讨论]对比MFC ,Winform ,WPF性能

对比MFC ,Winform ,WPF
MFC 生成本机代码,天然是很快。但是,消息循环,减缓了界面显示速度。学习

winform 封装了 win32 的api,屡次进行P/invoke 操做 (大部分使用p/invoke操做封装),速度慢。

wpf是一种新的模型,再也不使用win32 模型,本身新建模型,使用dx 做为新的显示技术,直接访问驱动程序,加快了运行速度,但是,这种模型,须要支持dx 9 的显卡,硬件要求高(你还能找到现代机器不支持dx9 的吗?)

开发效率上,MFC <WPF <winform

尽管MFC开发界面执行效率高可是开发效率低,做为如今的项目开发来讲时间跟开发效率每每能决定项目的成败,因此除非有特别的需求,不然都回尽可能避免用mfc来作开发,MFC只是一个弱封装器。

开发成本,MFC〉wpf〉winform

用MFC开发成本过高,对开发者能力要求更高,做为客服固然但愿开发的费用越少越好,开发者固然但愿钱赚得越多越好,这样一比,这也是MFC没落的一个很大的缘由。

界面执行效率上,MFC==WPF〉winform

随着计算机硬件的性能提升,多核cpu的普及,它们的差距会愈来愈小。

开发灵活性上:wpf〉MFC〉winform

美观上:Wpf〉winform〉MFC

这一项中MFC下要开发出一个华丽的ui极其困难,也许你能够说你能够用控件,可是商业开发控件是要收费的!!Wpf很容易就能够作出vista那样的ui特效。mfc要写出这种效果不知要写到何年何月。
这样一来MFC存在的价值就更低了。效率和美观不如Wpf,开发效率又不如winform,预计不出10年,随着vista取代xp,mfc将会退出历史舞台。

内存使用上:wpf〉winform〉MFC

随着计算机硬件的性能提升wpf这个缺点会被忽略。

使用范围:wpf〉MFC==winform

有以上可知:WPF 大有取代winform 和MFC之势,从将来net的发展来看,MFC之后只会变成一种经典,做为一种技术来供开发者学习,winform和WPF二者会并存发展,但最终都会被WPF取代,最终实现桌面应用程序和浏览器应用程序的统一。

http://kwon.iteye.com/blog/1250454

相关文章
相关标签/搜索