玩C#
我们玩技术,不是被技术玩。 Coding 是快乐的,而非苦逼的。 .Net/C# 这个神器竟然天天有人吐槽。看不下去鸟。
在 top10 语言中, C# 是最优美的语言,没有之一。在 top 10 语言中, C# 所可用的标准库及可获得其它库是最强大的之一,这个必须带之一,因为有 java 在。在 top10 语言中, C# 语言是性能最高的语言之一(开 unsafe 指针后可以和 C 一较高下,结果 100% 是 C# 败,不过性能差距并不大, C# 非托管程序性能约为 C 程序的四分之三),在 top10 语言中, C# 是内存管理机制最完善的语言(即可用 GC ,又可不用 GC ,虽然 C++ 也能做到,但是要靠第三方库,且使用起来不直观不方便)。此外, C# 的类库极其强大, C# 调用 Native API 极其简单。 C# 和函数式语言的互动( F# )也是最流畅的, C# 与脚本的互动也很简单( Powershell , IronXXX )。
一旦你掌握了 .Net 和 C# 。等于手中握了一把神器。当然,这个掌握要求很高,不是那些什么必知啊、精通啊、面试必考的那些东西。而是一些更简单更精髓的东东。
下面,以最近做的两个项目来展示下,神器应该怎么玩。
(1) 高性能开发
这个项目是一个对性能要求非常高非常高非常高非常高的实时视频分析项目。因为商业原因,具体细节不方便透露。本项目最开始的版本我是用的纯 C# 开发,因为是图像与视频项目,我打开了 unsafe ,用上了指针和非托管内存。项目中有一个核心算法,大部分运行时间耗在这个算法上面,写完之后,我发现,我写的这个 C# 版算法比国内外同行用 C++ 实现的快几十倍。分辨率差不多的话,他们处理一帧约需要 1 秒左右,而我只需要几十毫秒。
举这个例子不是想说 C# 比 C++ 快。实际上根据我这两年对 unsafe C# 指针的应用来看,一个写的好的非托管 C# 代码,性能约是 C 代码的四分之三。可为什么在实战中有这么好的性能呢, C# 下我们可以对开发任务做如下分解:对于性能不关键的地方使用托管程序,对于性能关键的地方使用非托管程序,即使是使用指针的非托管编程, C# 下的开发效率也比 C 和 C++ 快得多。这样一来,我的精力全部集中于关键地方的实现了,我就有更好的心情和更多的时间来进行优化,优化的结果就是, C# 版的算法反而比 C /C++ 的快。
也就是说,理论上, C/C++ 比 C# unsafe 快 30% ,但是在实践上,加上时间和资源的约束,反而可能是 C# 的代码更快。
当然,我这个算法的性能还不够高,达不到实时的目的。最终版本,核心算法用 CUDA 实现,外围算法用 C# unsafe 实现的。
如果我在 Win7 下开发,我不认为我有需要 C++ 的地方。当然, C 还是需要的,很多时候,要和硬件打交道。
一般搞图像和视频的都用 matlab 或 C++ ,或者两个都用。其中, matlab 设计算法, C++ 来重写以提高性能。而用 C# unsafe ,一个顶这两个,用它来设计算法,工作效率堪比 matlab ,运行性能堪比 C++ ,且可以直接上线运行。
(2) 快速原型开发
.Net 做原型开发是非常爽的。刷刷刷,很快就搞出来了。
这是一个数字版权管理的项目,项目整体方案是我设计的,我要验证这个方案具有可行性,因此,需要快速开发出一个原型出来。一二三四五,五个程序,一天一夜就搞出来了,项目的主要风险全部消灭。钱到手。
其实 C# 还有些新玩法。因为 C# unsafe 代码和 C 代码很像,我在想,能不能写个工具直接将 C# 算法代码翻译为 C 代码,为C带来强大的生产力。 C 是万金油,哪里都能用 。
作者: xiaotie , 集异璧实验室(GEBLAB)
出处: http://www.cnblogs.com/xiaotie/
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
分类: [03]管理思考 , [21]编码艺术 , [23]盗乃忒尔
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息