作者sh028044 (YouHua)
看板WindowsPhone
标题Re: [讨论] 到底是什麽程式会要用到NC?
时间Sun Jun 24 13:06:45 2012
原文43
1.用C/C++做底层,可跨iOS、Android、WM、Linux、Unix、Windows
手机的SDK允许可以呼叫自己的写的NativeCode,就会很好移植
效能也不会相差悬殊。
2.
桌机的OS都有支援,没差所以就不讨论了。
3.
用.NET开发本身并不会有甚麽问题,当下到WP时,功能是直接被
抽掉,没有函式库给你呼叫。
当.NET不对其装置做支援的时候,就可以靠自己撰写NativeCode
,把功能补上。
但WP7 SDK的状况,WP7不允许一般开发者使用自己写的NativeCode,
如果直接转换成C#,效能就会低落很多。
硬是要上的结果,文章在编号3235有说明。
C#语言的层级就像Java一样,属於类编译程式语言
比直译式程式快,比编译式程式慢。
大部分使用C#尽量还是要使用.NET函式库,因为本身.NET函式库就是
NativeCode。
单纯比执行效能跟Java比的话Java至少有快C#4倍(以前的记忆)
这就跟C#的Virtual Machine有很大的关联,必竟Java已经是个战场
老兵了。C#要更快还要一段时间的淬链。
C#开发WP开发速度很快是没错,不过是基於.NET都帮你写好的状况下
文章3243有.NET不支援的小举例。
开发者的话当然不会跟M$一起砍掉重练XD
其实.NET有超多不支援现在的WP7,所以当实际下去写的时候
发现咦??怎麽空空如也XD
以前WM还可以自己写NativeCode补上,不过M$连这招都封住了。
好啦,其实这篇因该算是赚文章数无误,因为小弟记得
发这种类似的文很多次了,自己一直发也感到很歹势捏XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.248.170.58
1F:→ friedpig:所以没意外 重另两个平台移植过来通常就直接NC转一下就好 06/24 20:35
2F:→ friedpig:是这样吗? 06/24 20:35
3F:→ james732:不太可能,平平都是桌电,Windows与Linux都用C写也没那麽 06/24 21:42
4F:→ james732:轻松可以换来换去... 06/24 21:42
5F:→ james732:其实像.NET这种中间码的,对於移植理论反而比较有利 06/24 21:45
基本上跨平台开发者基本上都使用GCC编译器,windows上就是mingw
mac与Unix就是使用llvm的GCC编译器,配合跨平台函式库
来开发跨平台的应用程式。
比如像socket网路通讯协定的函式库就会做一个抽象结构或
抽象类别(亦是抽象层或编译前处理)将不同系统分开,根据系统套板就好了。
接着比如开发Windows的,拿Visual studio arm编译器编译成dll
这样windows版本函式库就移植完成了,当然不一定要透过C#这层
因为WP7的话只能用C#,所以才需要编译成C#可呼叫的函式库
透过解锁这样WP7就可以跑NativeCode,不过目前丢上去市集
M$也不会给你过就对了XD
※ 编辑: sh028044 来自: 111.248.170.58 (06/24 22:05)
不过非跨平台的开发者就不需要这麽费工,全部使用.NET就ok了
※ 编辑: sh028044 来自: 111.248.170.58 (06/24 22:11)
6F:→ icarus0508:我记得最近c#执行速度在win7上 已经比java快了 06/24 22:55
7F:→ icarus0508:因为ms 有做了非常多的优化 加上这几年c#用者大量成长 06/24 22:56
8F:→ icarus0508:多平台开发者 通常会上下层分开 功能上两者差不多的 06/24 22:57
9F:→ icarus0508:话 就会上层用同样的code 下层在看不同call不同lib 06/24 22:57
喔!效能提升了?!有空来去测试一下,用Visual Studio 11的C#来跟JDK7比看看
※ 编辑: sh028044 来自: 111.248.170.58 (06/24 23:06)
10F:→ james732:我一直觉得.NET在Windows底下有主场优势...XDDD 06/24 23:07
11F:推 arrenwu:C#在 Win7 上如果比 Java 快的话,那就不会比C++慢多少耶 06/24 23:09
嗯嗯绝对会有主场优势,就像当初DirectX效能超越了OpenGL一样
毕竟OpenGL要兼顾跨平台性,不会对Windows做特别的最佳化
※ 编辑: sh028044 来自: 111.248.170.58 (06/24 23:19)
12F:推 icarus0508:diectx後来超过opengl 最主要还是近年 ms 正好是 06/25 00:04
13F:→ icarus0508:cg界技术的牛耳之一 shader开始就超过很多了 06/25 00:04
14F:→ icarus0508:opengl考虑太多 反而绑手绑脚 变成现在cg界很多名词 06/25 00:05
15F:→ icarus0508:都跟着ms走 06/25 00:05
16F:→ icarus0508:.net 一直都是有主场优势啊xd 而且有不少是ms直接用 06/25 00:05
17F:→ icarus0508:c++在实做的xdd btw 其实vm code不一定真的比nc慢 06/25 00:06
18F:→ icarus0508:现在很多vm的实作已经很好了 java 比c++慢 最大的 06/25 00:06
19F:→ icarus0508:原因还是在 回收 以及安全机制上 06/25 00:07
20F:→ icarus0508:这几年c#成长快速 除了因为他通过iso等标准认证外 06/25 00:08
21F:→ icarus0508:甲骨文 也帮了不少忙xd (扯java後腿 冏) 06/25 00:08
22F:→ icarus0508:还有opengl 效能败给d3d 还有一个理由 是相容过去 06/25 00:09
23F:→ icarus0508:其实多平台反而不是效能败的理由(因为各家会好实作) 06/25 00:09
24F:→ icarus0508:相容过去 才是致命一击 变成gl超多时代的眼泪在乱… 06/25 00:10
其实VM code近年有进步很多但是还是卡在Virtual Machine这个执行器
因为Virtual Machine就是要解决相容性的问题,就诚如您所讲的需要顾及
较多的因素,因此效能还是差C/C++很多,毕竟C/C++不需要再透过
Virtual Machine这层,或是更刁钻的方式在C内部内嵌组合语言
直接控制CPU做运算。
至於VM Code没有比较慢的方面是因为呼叫了NC code函式库的缘故
会跳过Virtual Machine去执行。
嗯虽然OpenGL这样牺牲了效能,不过带给了很多非Windows OS很多贡献
甚至可将游戏无痛搬移到Windows,这还蛮值得的
※ 编辑: sh028044 来自: 111.248.170.58 (06/25 00:52)
25F:推 arrenwu:之前看到的测试,C++的速度差不多是 Java 的1.5倍 06/25 00:34
26F:→ arrenwu:不过这样还满想试试看 C# 到底在 Win7 上面有多快了 科科 06/25 00:35
27F:→ arrenwu:不过我同意没有 Native Interface 这个限制太严重 06/25 00:36
28F:推 arrenwu:我记得近年进步很大的原因是因为 JIT 不是吗? 06/25 01:00
29F:推 icarus0508:以游戏开发商角度 倒是期待d3d 统一世界 (认真) 06/25 01:25
30F:→ icarus0508:另外 很多其实是因为利用gpu加速 <=但shader 对 06/25 01:25
31F:→ icarus0508:非cg背景的人来说 并没有比较简单 06/25 01:26
32F:→ icarus0508:你可以试试现在的vm 效能并不像传统那样想法 慢了 06/25 01:27
33F:→ icarus0508:真正慢已经在安全性跟资源上影响较多 而不再是vm 06/25 01:27
34F:→ icarus0508:这几年对vm的改写 其实还满大的近步哦 06/25 01:28
35F:→ icarus0508:个人是以前在校用gl 工作因为还是做游戏 用d3d 06/25 01:28
36F:→ icarus0508:心得是越简单的东西gl越方便 越复杂的东西gl越难用 06/25 01:29
我曾经也想过最好是D3D统一游戏市场,不过
D3D要统一的话也还是很有难度啦,因为毕竟很多厂商都需要做跨平台这件事
尤其实MacOS的开发商,OpenGL要挂掉因该蛮困难的
Java效能虽然不错,但当初公司内部开会被排除了
因为有很多人就是会跟你多计较那0.0x ms的速度
因为都用伺服器跑超大量的运算
就算到windows宁愿重新build,也不想用java
C#虽然Linux可以用C# mono但是C# mono效能本身比windows C#更慢
因为公司有很多Unix与Linux的伺服器,windows与mac反而占少数
因为机器很多所以老板就要用Linux与Unix省授权费QQ
程式语言效能比较
http://ppt.cc/Qs2q
不过这是很久以前的数据了,有人有找到2012的吗?
里面的java都还在jdk6
※ 编辑: sh028044 来自: 61.56.8.109 (06/25 12:37)
赞唷!他们都不测试一下C# windows XD,一直测C# mono @@
※ 编辑: sh028044 来自: 61.56.8.109 (06/25 12:47)
38F:推 arrenwu:应该是因为他们的测试都是在 Ubuntu 的关系吧XD 06/25 12:49
39F:→ icarus0508:因为会比较的 都是在linux上比较多啊 06/25 16:39
40F:→ icarus0508:windows上 基本上就一定用ms相关的比较多 06/25 16:40
41F:→ icarus0508:opengl是不可能挂啦xd 因为现在的gl ms也是其中一个 06/25 16:41
42F:→ icarus0508:leader 而且对ms来说 他必需要一个"对手" 不然又 06/25 16:41
43F:→ icarus0508:会被人说话… 06/25 16:41
44F:→ icarus0508:游戏开发商 传统上 是pc/console/arcade 06/25 16:42
45F:→ icarus0508:而现在console这边 至少下一代 wiiu xbox 没意外 06/25 16:42
46F:→ icarus0508:是用d3d 而sony 目前有两个乳摸 一个是用cell改 06/25 16:43
47F:→ icarus0508:另一个也是用d3d x86 好玩的是 都有spec 流出xdd 06/25 16:43
48F:→ icarus0508:pc上就不用说了 以我所知 几个大厂写pc/mac 06/25 16:44
49F:→ icarus0508:都是采上下层分开方式 下层看os 来用不同api 06/25 16:44
50F:→ icarus0508:现在shader code 都很相像 要转也不是问题 06/25 16:45
51F:→ icarus0508:arcade还是linux多 不过也是有用embed-xp(d3d)的 06/25 16:46
嗯i大你这边提到的上层就是抽象层,就是可将程式码写成一样的api
而不是真的api,这层维护好,要移植就很简单了
在编译的时候这层会去负责自动对应OS的实际绘图api
arcade会用XP因该是懒得移植到Linux上吧XD?
不过每台xp arcade都需要有微软授权,
不过因该是还好,arcade几乎都不会更新
※ 编辑: sh028044 来自: 61.56.8.109 (06/26 12:33)
※ 编辑: sh028044 来自: 111.248.171.162 (06/26 20:17)