程序员人生 网站导航

在.net framework平台下开发组态软件

栏目:综合技术时间:2013-10-29 05:11:10

最初接触.net framework的时候是2002年,那时还是beta版本。看到微软描述的.net framework未来的规划蓝图后,被盖茨忽悠的热血贲张,感觉.net是未来的发展方向,并可以解决当前用户所遇到的一些问题。当时还给国内的一家知名的组态软件厂商提交了一份研发报告,可惜没被采纳。

说实话,刚开始利用.net开发工控软件的时候还是存在诸多担心,主要担心有以下几点,与各位博友分享:

性能问题

由于.net framework是在API上又封装了一层,因此无疑会带来运行效率上的问题。而对于工控软件,程序的运行效率又是极为关键的要素之一,这是我们当初所最为担心的地方。事实上,影响程序运行效率的最关键因素在于系统架构和编码人员。有资料显示,采用C++编写的程序与采用C#编写的程序在性能上相差无几,相对于程序员水平和对系统运行效率重视程度而导致的差异几乎可以忽略不计。

想当初听说.net的装箱拆箱操作对系统性能影响较大,而在程序中对数据进行了特殊处理,现在看来完全没有必要。一来到了.net framework 2.0装箱拆箱效率有了较大改善,二来这样的设计对于程序的扩展性有较大的影响。

开发资源问题

经过广大程序员的努力,目前在windows平台下积累了大量可重用性资源,如各种组件、ActiveX控件等等,这也是windows平台下软件开发的优势之一。当初我们担心在.net平台下开发资源太少,加上工控软件一般来说会比潮流慢半拍,所有工作都需要自己来做,这是我们所担心的地方。

事实证明,我们的这种担心也是多余的。大家可以看到,目前在.net平台下的编程队伍飞速扩展,各种winform控件不断推出。就连著名的ComponentOne也很快推出了.net下的控件集。

此外需要说明的是.net对过去的com和ActiveX控件同样支持,在发布的易控软件中,可以很容易的添加ActiveX控件。

API调用问题

这是一个比较挠头的问题,由于.net下的资源相对有限,有时不得不利用调用非托管代码的方式调用第三方库。由于调试工具的缺乏,有时出了问题不知问题之所在。记得2003年在调用国外知名硬件厂家提供的动态库时,总是不能成功,折腾了近一个星期,在网上搜索了N多英文资料,最终发现是.net framework 1.0的bug。

也许有博友要问,在.net平台上利用C#开发组态软件到底给你们带来哪些好处呢?经过近几年的实践,可以说好处是大大的,下面就我自己的感觉列出几条,同时也是针对微软当年的承诺(也就是.net吸引我的地方)看微软兑现了哪些。

内存垃圾回收不再发生内存泄漏

这一点应该是部分做到。我们知道,用VC编写win32程序最头疼的就是内存泄漏问题,在家里测试不到而在用户那里被频繁调用的内存泄漏代码会造成内存的不断上涨。这也是过去许多用户抱怨机器频繁死机的主要原因。

感谢微软,.net的垃圾回收机制将程序员从这种紧张繁重的工作中解脱出来。至今为止,易控的用户(包括那些每天24小时不停机的钢厂用户)还从未报过运行系统死机的问题。

说它部分做到是因为有些代码,主要是GDI+相关代码还需要手工释放资源句柄。

.net程序可以跨平台运行

从理论上讲,.net程序运行在.net framework平台上,与操作系统无关。但事实上这一点可能要落空了,虽说有novell开发的mono提供Linux平台上的.net framwork,但一来mono的开发远远滞后与.net framework的更新,二来程序难免有部分地方需要调用底层API。设想程序可以无缝移植到Linux上目前不太现实。

程序在网络上运行如同在单机上运行

这一点微软做的比较好,无论是早期的.net Remoting还是现在的WCF,访问远程对象几乎同访问本机对象一样简单,只需添加几条指令即可。这也为开发基于网络的组态软件提供了强大的武器。尤其是WCF,支持多种通道,并可以方便地更换通道,感兴趣者可以参考WCF的教程。

桌面应用程序和Web应用程序采用同一套代码

这点直到.net framework 3.0才得以实现,并且Web程序仍然存在访问安全机制的问题。但无论如何对组态软件的开发者来讲都是一个福音,再也无需为了支持Web发布重新编写大量的代码了,不过前提条件是将你的图形改成WPF图形元件,从WPF提供的强大功能来看还是值得的。

丰富的图形界面

凡是用过易控的用户无不对其精美的画面赞不绝口,这是利用.net对GDI+的支持实现的,目前的WPF还提供了对2D和3D动画的支持,这是通过封装DirectX实现的。想像一下,编写一个支持2D和3D图形动画的组态软件是不是很酷?

 .net平台还有许多引人入胜的地方,在此不一一列举。事实上,.net对我影响最大是其以xml语言描述配置的设计,这使得我们的架构具有高度的灵活性和可扩展性。基于服务的思想使得我们的模块可以灵活的部署在网络上。此外,除了C#语言的其他优点外,我认为C#是一款真正面向对象的语言,你认为如何呢?

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐