warensoft专注于.NET 王宇

.NET 教学 .NET WebGame 3D应用开发 Email:warensoft@163.com

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  35 随笔 :: 0 文章 :: 146 评论 :: 0 引用

再谈为什么要使用MONO

warensoft 中科院计算所培训中心

今天中午我收到一个Email,是关于以前写的一个MONO文章的疑问,我对此做了一些解释,希望与有相同问题的朋友一起分享一下,邮件内容如下:

我在网上找到了您写的一篇关于Mono的“在windows下使用Mono”的文章,我想问一下,在windows下开发的winForm程序,和使用Visual Studio开发的程序有什么区别,仅仅只是为了不使用JIT而提高运行速度的吗?再者,为什么要在windows上使用mono开发,在windows使用mono开发的程序可以直接移植到其他平台吗?我还有个疑问,我在这个网站上http://www.go-mono.com/mono-downloads/download.html,下载MONO平台,像下面这张图片一样,我选择的是基于openSUSE Linux系统的MONO平台,我应该点击哪个,打开后,选择哪个下载,打扰了,期待你的回答。

基于以上的问题,我想可以这样解释:
首先你可以把.NET和JAVA的框架理解成一样,我们编写的代码都是在上层代码,即使编译出来也不是机器代码,MS在提出.NET的时候就说可以和JAVA一样能跨平台,能跨平台的原理就是可以在不同平台上使用不同的JIT将我们编写的上层语言解释为对应的机器语言,而问题在于目前的“JIT”是一个MS产品,这个产品的目的是将我们写的上层语言翻译成Windows可以识别的机器语言,另外MS并没有提供其他平台的“JIT”,实际上MONO就是一个第三方开发的“JIT”,当然MONO除了可以将上层代码解释成Linux的机器语言外也可以将其解释为Windows的机器语言。
 
因此,MONO和JIT是同一层次的东西,只是MONO解释出来的东西,在Windows平台上没有MS的JIT好,速度慢,并且功能要少一些(不能解释WPF,大部分的WCF也不能解释,在Winform方面也有一些功能解释不了)。
 
原则上来讲做好的exe和你使用MoNO还是MS的DotNETFrame是没有关系的,因此你可以使用VS来写程序,编译出来EXE,然后用MONO来运行这个程序,但是问题是VS是使用MS的JIT来解释程序的,所以在开发的时候就很有可能超出了MONO能解释的范围。如何保证使用VS的程序不超出MONO能解释的范围呢?MONO的官网上提供了一个兼容性测试工具,但是这个东西不是免费的。
 
使用MONO的优势主要有2点:
1.可以跨平台
2.可以将MONO运行时的一些核心DLL文件直接打包在安装包里,而不需要安装整个框架,这一点是与MS的 .netFramework相比是一个非常大的优势,将必要的MONO运行时DLL文件打包压缩也就10多M,现在.NET4.0也要40多M,现在有很多项目就已经用MONO来开发了,我是做3D游戏的,现在的Unity3d引擎就是就MONO写的内核
 
要想保证Window和Linux的兼容性你可以在Windows下的MonoDevelop里写程序,建议不要使用WinForm的方式开发,因为Winform本向是Win32技术,兼容性在Linux下不是很好,另外在在MONO Develop(MONO的IDE)里没有Winform的设计器,这一点很头疼的,MONO里建议使用GTK#这种第三方的Form技术来做UI,MONODevelop里可以选择程序的运行时是MONO还是.NET Framework,你选择MONO就好了。
但是如果你在Linux开发的话,可以使用Linux下的MONODevelop。
 
至于MONO在Suse下的安装,我只是在MONO刚出来的时候安装过,现在早就忘记了,所以还需要兄弟你自己研究一下,希望我的解释对你有所帮助!
posted on 2011-07-14 13:49 王宇 warensoft 阅读(2702) 评论(17) 编辑 收藏

评论

#1楼 2011-07-14 14:07 _龙猫      
标题写错了
 回复 引用 查看   

#2楼[楼主] 2011-07-14 14:16 王宇 warensoft      
@_龙猫
哦谢谢了,改过来了
 回复 引用 查看   

#3楼 2011-07-14 14:20 MyMelody      
谢谢您的回答,那请问您现在在什么版本的Linux系统下安装的MONO?既然MONO不支持WinForm,那是不是MONO只能开发WEB项目了?
 回复 引用 查看   

#4楼 2011-07-14 14:24 IT鸟      
图片是×
 回复 引用 查看   

#5楼[楼主] 2011-07-14 14:31 王宇 warensoft      
@MyMelody
MONO并不是不支持Winform
“不能解释WPF,大部分的WCF也不能解释,在Winform方面也有一些功能解释不了”
只是对Winform兼容性不好,在MONO里可以使用GTK#来做Form
 回复 引用 查看   

#6楼 2011-07-14 14:36 Jon.Hong      
@王宇 warensoft
mono效率对比jit怎样?
 回复 引用 查看   

#7楼[楼主] 2011-07-14 14:49 王宇 warensoft      
@Jon.Hong
前一段时间用MONO做了一点小东西,别的不说在WCF的速度上,照MS差太多了,有的时候10倍以上的差距。
别的也简单测试过,速度不是很好,毕竟Windows是MS做的呀
 回复 引用 查看   

#8楼 2011-07-14 15:13 博客园团队      
图片不能显示,麻烦上传一下图片。
 回复 引用 查看   

#9楼 2011-07-14 15:50 HoYO      
字体颜色看着刺人啊
 回复 引用 查看   

#10楼 2011-07-14 15:54 rexzhou[未注册用户]
最新Fedora有mono 2.10的包。可以使用ASP.NET MVC3。功能已经相当齐全。GUI就比较坑爹了,放弃
 回复 引用   

#11楼 2011-07-14 16:08 冷冷      
一句话,跨平台其实指的只是框架级别或者运行时的跨平台,而UI层面本身就不具备跨平台的优势,所以核心的业务逻辑用Mono,通过服务层向上提供服务,具体的平台使用平台相关的UI技术来实现,这才是Mono的价值所在。
 回复 引用 查看   

#12楼[楼主] 2011-07-14 19:39 王宇 warensoft      
@冷冷
楼上说的有道理,表现层技术应该选择一个平台兼容性好的方案,不一定非要盯着Winform不放
 回复 引用 查看   

#13楼 2011-07-14 23:58 边城浪      
做服务器程序也不错..Mono在Windows上的实现不及.NET Framework..
但是在Linux下的Mono, 跟Windows下的NET Framework 就有得一拼了..
 回复 引用 查看   

#14楼[楼主] 2011-07-15 00:08 王宇 warensoft      
@边城浪
嗯,有机会试试
 回复 引用 查看   

#15楼 2011-07-15 08:42 Taly.W.Y      
看到楼主的名字突然眼前一亮~~同名同姓~~~
 回复 引用 查看   

#16楼[楼主] 2011-07-15 16:49 王宇 warensoft      
@Taly.W.Y
哦,我都不知道应该怎么称呼你了哈哈,叫你名字会感觉很奇怪
 回复 引用 查看   

MONO不支持WINFORM的
只是GTK.NET
 回复 引用   

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2106282 qXJWpJH1MY4=