像这样玩C#【转】,觉得文章写的不错就转来啦!版权不在我

我们玩技术,不是被技术玩。Coding是快乐的,而非苦逼的。.Net/C# 这个神器竟然天天有人吐槽。看不下去鸟。

在top10语言中,C#是最优美的语言,没有之一。在top10语言中,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是万金油,哪里都能用。

原文:http://www.cnblogs.com/xiaotie/archive/2012/06/12/2546009.html

时间: 2024-10-07 19:45:25

像这样玩C#【转】,觉得文章写的不错就转来啦!版权不在我的相关文章

用Unity做的一个小游戏,仿照一个例子写的,个人觉得文章写的不错,哈哈

这篇文章写的挺好

http://blog.csdn.net/mao906581468/article/details/8708700 这篇文章写的挺好,布布扣,bubuko.com

因为文章写错两个字,冯东阳被淘宝索赔1000万

近日,自媒体人冯东阳在松松兄弟会群里发了一篇文章称:他在1月14日收到了法院传票,因为自己的一篇文章涉及到侵害淘宝的名誉权,被要求赔偿1000万.对于法院传票,要求必须在3月份出庭,这下可让冯东阳兄恼火了.没想到这篇文章给他带来了大麻烦. 然而事实已经是事实了,对于法院传票,要求必须在3月份出庭.而且迫于精神压力,冯东阳已离职!目前此次事件持续发酵,已经上了腾讯网头条. 视频https://v.qq.com/x/page/q0376jihggy.html (河南都市频道对报道了冯东阳此事) 事情

关于JSONP和JSON(一篇写的不错的文章)

说说JSON和JSONP,也许你会豁然开朗 作者: 随它去吧  来源: 博客园  发布时间: 2012-07-16 14:33  阅读: 23976 次  推荐: 115   原文链接   [收藏] 前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功

韩寒《一个》里面的文章写得怎么样?

我简单说一下吧. 从one一个刚开始上线的时候,我就一直追着看,一天一幅画,一句话,一篇文章,一个问答.慢慢得开始喜欢上了这个APP. 在这里我知道了暖小团,读了她的<给未来丈夫的一封信><致我的前任男友><去他妈的成长>,然后读了她的杂志专栏等等.我真的感觉,姑娘你真是条汉子!! 真够直接坦诚!!真乃我大东北女汉子的典范: 在这里我知道了silver是水果味儿的其实叫做颜茹玉,看了她的<此去经年><十五年>,每篇都充满了肆意横流的那种对母亲的爱

看到一篇写的关于block和delegate放在一起来方便大家理解的文章,感觉不错,就推荐给大家来看一下。

代理设计模式对于iOS开发的人来说肯定很熟悉了,代理delegate就是委托另一个对象来帮忙完成一件事情,为什么要委托别人来做呢,这其实是MVC设计模式中的模块分工问题,例如View对象它只负责显示界面,而不需要进行数据的管理,数据的管理和逻辑是Controller的责任,所以此时View就应该将这个功能委托给Controller去实现,当然你作为码农强行让View处理数据逻辑的任务,也不是不行,只是这就违背了MVC设计模式,项目小还好,随着功能的扩展,我们就会发现越写越难写:还有一种情况,就是

写的不错的一篇云数据库的文章

本文作者:许中清,腾讯云自研数据库CynosDB的分布式存储CynosStore负责人.从事数据库内核开发.数据库产品架构和规划.曾就职于华为,2015年加入腾讯,参与过TBase(PGXZ).CynosDB等数据库产品研发.专注于关系数据库.数据库集群.新型数据库架构等领域.目前担任CynosDB的分布式存储CynosStore负责人. 企业IT系统迁移到公有云上已然是正在发生的趋势.数据库服务,作为公有云上提供的关键组件,是企业客户是否愿意将自己运行多年的系统搬到云上的关键考量之一.另一方面

字符串操作方法(大家有什么不懂的可以来找我啊,但是这个文章写的有点不是那么高大尚,大家不要介意哦)

字符串.charAt(index):返回前面字符串中指定位置的字符 字符串.charCodeAt(index):返回前面字符串中指定位置的字符的编码(unicode) String.fromCharCode(编码值):把编码值转成对应的字符 字符串.substring(start, end):返回前面原始字符串中从start位置开始到end位置结束的字符串,不包含end位置的字符 字符串.slice(start, end):返回前面原始字符串中从start位置开始到end位置结束的字符串,不包含

收藏文章 写的很好 可惜有些还是看看不懂额。。。RequireJS进阶:模块的定义与加载

文 RequireJS进阶:模块的定义与加载 javascript requirejs 两仪 2014年12月01日发布 推荐 4 推荐 收藏 15 收藏,6.9k 浏览 概述 模块不同于传统的脚本文件,它良好地定义了一个作用域来避免全局名称空间污染.它可以显式地列出其依赖关系,并以函数(定义此模块的那个函数)参数的形式将这些依赖进行注入,而无需引用全局变量.RequireJS的模块是模块模式的一个扩展,其好处是无需全局地引用其他模块. RequireJS的模块语法允许它尽快地加载多个模块,虽然