像这样玩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
像这样玩C#【转】,觉得文章写的不错就转来啦!版权不在我的更多相关文章
- 用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈
- SpringMvc 这篇文章写得不错 多多学习2017.6.29
http://www.cnblogs.com/bigdataZJ/p/springmvc1.html 博客园链接
- Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4
Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 1. 原则 2 1.1. 有深度, 有广度 2 1.2. 业务通用性有通用性 尽可能向上抽象一俩层..业务通用性与语言通用性. 2 ...
- Atitit.如何文章写好 论文 文章 如何写好论文 技术博客
Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 1. 原则 1 1.1. 有深度, 有广度 1 1.2. 业务通用性有通用性 尽可能向上抽象一俩层..业务通用性与语言通用性. 2 ...
- N个tomcat之间实现Session共享(写的不错,转来的)
以下文章写的比较不错,转来的. tomcat的session共享设置如此简单为什么很少人去用.这个我说的重点. 1.自身的session如果服务器不在同一个网段会有session失效(本人使用的是阿里 ...
- 关于Spring MVC写的不错的几篇博客
关于Spring MVC写的不错的几篇博客 https://my.oschina.net/kolbe/blog/509810 https://www.cnblogs.com/sunniest/p/45 ...
- 玩转TypeScript(引言&文章目录) --初看TypeScript.
JavaScript过去一直被当作一种玩具语言存在,直到2005年以后,这门语言又开始活跃并可以说是火爆,而且随着浏览器版本的不断升级和完善,各种DOM之间的兼容性已经渐渐的被各种技术解决了,比如经典 ...
- 这篇文章写的真好-NLP将迎来黄金十年-书摘
机器之心上面微软亚研的这篇文章真好: https://baijiahao.baidu.com/s?id=1618179669909135692&wfr=spider&for=pc 其中 ...
- 玩转Javascript 给JS写测试
给js写测试已经不是什么稀奇的事情了,最近项目里用了jasmine和JsTestDriver两种js测试框架.JsTestDriver易于与持续构建系统相集成并能够在多个浏览器上运行测试轻松实现TDD ...
随机推荐
- JQ获取当前根目录
function getRootPath_web() { //获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp ...
- Jenkins设置默用户为root
https://www.jianshu.com/p/181dfb259dc7 最近在需要在jenkins执行shell脚本,由于Jenkins之前是默认在线安装的,这样jenkins设置了默认用户je ...
- 让gitlab暴露node-exporter供外部prometheus使用
花了两天部署了一套监控服务 prometheus+node-exporter+grafana,公司的gitlab服务器准备部署node-exporter的时候突然发现gitlab已经有了这些服务, 也 ...
- hive 排序
1.全局排序(order by) Order by:全局排序,只有一个reducer ASC(ascend):升序(默认) DESC(descend):降序 2.每个MR内部排序(sort by) s ...
- Using text search in Web page with Sikuli
在網頁中如何使用Sikuli找特定字串呢? 原理: 我們可以使用 組合鍵 ctrl + 來放大網頁的比例,使得sikuli的OCR功能找的更清準 實作: for i in range(4): type ...
- 合并石子 (区间dp+前缀和)
[题目描述] N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.计算出将N堆石子合并成一堆的最小得分. [题目链接] http: ...
- ls命令输出文件的绝对路径
find $PWD | xargs ls -ld 再结合 grep 筛选
- 微信小程序(5)--阅读器
最近用微信小程序写了一个图书阅读器,可以实现左右滑动翻页,按钮翻页,上下滚动,切换背景,控制字体大小.以及记住设置好的状态,如页面再次进来保留上次的背景色和字体大小. 由于暂时没有真实的数据接口,所以 ...
- windows10安装nodejs 10和express 4
最进做一个个人博客系统,前端用到了semanticUI,但是要使用npm工具包,所以需要安装nodejs,nodejs自带npm 下载 去官网下载自己系统对应的版本,我的是windows:下载 可以在 ...
- sd卡无法启动及zc706更改主频后可以进入uboot无法启动kernel的坑
好长的标题 +_+ 1.sd卡无法启动 起因:kernel底下通过dd测试速度,擦写了sd卡,再启动时发现无法启动 于是重新格式化,再将BOOT.bin 相关dtb u-rootfs zImage和u ...