我们玩技术,不是被技术玩。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

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

  1. 用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈

  2. SpringMvc 这篇文章写得不错 多多学习2017.6.29

    http://www.cnblogs.com/bigdataZJ/p/springmvc1.html  博客园链接

  3. Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4

    Atitit.如何文章写好 论文  文章  如何写好论文 技术博客 1. 原则 2 1.1. 有深度, 有广度 2 1.2. 业务通用性有通用性 尽可能向上抽象一俩层..业务通用性与语言通用性. 2 ...

  4. Atitit.如何文章写好 论文 文章 如何写好论文 技术博客

    Atitit.如何文章写好 论文  文章  如何写好论文 技术博客 1. 原则 1 1.1. 有深度, 有广度 1 1.2. 业务通用性有通用性 尽可能向上抽象一俩层..业务通用性与语言通用性. 2 ...

  5. N个tomcat之间实现Session共享(写的不错,转来的)

    以下文章写的比较不错,转来的. tomcat的session共享设置如此简单为什么很少人去用.这个我说的重点. 1.自身的session如果服务器不在同一个网段会有session失效(本人使用的是阿里 ...

  6. 关于Spring MVC写的不错的几篇博客

    关于Spring MVC写的不错的几篇博客 https://my.oschina.net/kolbe/blog/509810 https://www.cnblogs.com/sunniest/p/45 ...

  7. 玩转TypeScript(引言&文章目录) --初看TypeScript.

    JavaScript过去一直被当作一种玩具语言存在,直到2005年以后,这门语言又开始活跃并可以说是火爆,而且随着浏览器版本的不断升级和完善,各种DOM之间的兼容性已经渐渐的被各种技术解决了,比如经典 ...

  8. 这篇文章写的真好-NLP将迎来黄金十年-书摘

    机器之心上面微软亚研的这篇文章真好: https://baijiahao.baidu.com/s?id=1618179669909135692&wfr=spider&for=pc 其中 ...

  9. 玩转Javascript 给JS写测试

    给js写测试已经不是什么稀奇的事情了,最近项目里用了jasmine和JsTestDriver两种js测试框架.JsTestDriver易于与持续构建系统相集成并能够在多个浏览器上运行测试轻松实现TDD ...

随机推荐

  1. Lambda拉姆达表达式

    拉姆达表达式常用于委托,也就是说拉姆达表达式是匿名函数,简单点就是函数. a => a.Equals("string"); //原形为: (a) => { return ...

  2. 前端最常用的跨域方式--jsonp

    jsonp通过动态创建script标签的方式来实现跨域通信.原理是浏览器允许html标签在不同的域名下加载资源. <script> var script = document.create ...

  3. 洛谷 P1589 泥泞路 & 2019青岛市竞赛(贪心)

    题目链接 https://www.luogu.org/problemnew/show/P1589 解题思路 用结构体存下每一段泥泞路的左端点和右端点,然后用sort根据左端点排序,采用贪心的思想,从左 ...

  4. [原]Threads vs Processes in Linux 分析

    Linux中thread (light-weighted process) 跟process在實作上幾乎一樣. 最大的差異來自於,thread 會分享 virtual memory address s ...

  5. Ubuntu login as root automatically

    vim /etc/lightdm/lightdm.conf Finally, edit the file as shown below and save it. autologin-user=< ...

  6. Go语言_包、变量和函数

    包.变量和函数 学习 Go 程序的基本结构. Go 作者组编写,Go-zh 小组翻译. https://go-zh.org 包 每个 Go 程序都是由包构成的. 程序从 main 包开始运行. 本程序 ...

  7. highcharts.js两种数据绑定方式和异步加载数据的使用

    一,我们先来看看异步加载数据的写法(这是使用MVC的例子) 1>js写法 <script src="~/Scripts/jquery-2.1.4.min.js"> ...

  8. RabbitMQ ——四种ExChange及完整示例

    RabbitMQ常用的Exchange Type有fanout.direct.topic.headers这四种,下面分别进行介绍. 这四种类的exchange分别有以下一些属性,分别是: name:名 ...

  9. 机器学习-决策树算法+代码实现(基于R语言)

    分类树(决策树)是一种十分常用的分类方法.核心任务是把数据分类到可能的对应类别. 他是一种监管学习,所谓监管学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,通过学习得到一个 ...

  10. Nginx学习总结(一)

    Nginx是目前比较主流的HTTP反向代理服务器(其企业版提供了基于TCP层的反向代理插件),对于构建大型分布式web应用,具有举足轻重的作用.简单来说,nginx有2个主要的功能:动/静态资源分离. ...