像这样玩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 ...
随机推荐
- upc组队赛18 THE WORLD【时间模拟】
THE WORLD 题目链接 题目描述 The World can indicate world travel, particularly on a large scale. You mau be l ...
- mybatis中Oracle分页语句的写法
最近一段时间使用oracle数据库查询分页, 用的是springboot. Oracle数据库中没有像mysql中limit的写法, 只能换其他方式写. 考虑到oracle中的ROWNUM变量, 使用 ...
- Tensorflow--Keras官方原文
Keras 是一个用于构建和训练深度学习模型的高阶 API(应用程序接口).它可用于快速设计原型.高级研究和生产,具有以下三个主要优势: 方便用户使用 Keras 具有针对常见用例做出优化的简单而一致 ...
- Netty内存管理器ByteBufAllocator及内存分配
ByteBufAllocator 内存管理器: Netty 中内存分配有一个最顶层的抽象就是ByteBufAllocator,负责分配所有ByteBuf 类型的内存.功能其实不是很多,主要有以下几个重 ...
- Codeforces 1148C(思维)
题面 给出一个长度为n的排列a,每次可以交换序列的第i个和第j个元素,当且仅当\(2 \times |i-j| \geq n\),求一种交换方案,让序列从小到大排好序 分析 重点是考虑我们怎么把第x个 ...
- 【题解】Intervals
题目大意 有\(n\)个区间(\(1 \leq n \leq 200\)),第\(i\)个区间覆盖\((a_{i}, b_{i})\)且有权值\(w_{i}\)(\(1 \leq a_{i} &l ...
- Notepad++添加插件Funtion List 支持PHP
插件下载地址:functionlist插件 配置方法:关闭notepad++; functionlist.dll拷贝到 安装目录/plugins目录下; 下载php.bmp 地址:https://gi ...
- 2.openshift授权策略和scc理解
policy管理概念 查看policy的方式可以通过cli进行查看 Roles grant various levels of access in the system-wide cluster po ...
- Metasploitable2使用指南
Metasploitable2使用指南 Metasploitable2 虚拟系统是一个特别制作的ubuntu操作系统,本身设计作为安全工具测试和演示常见漏洞攻击.版本2已经可以下载,并且比上一个版本包 ...
- 服务器处理 json 数据
今天做小程序后端,需要处理 json 数据,我用的 express 框架,无法直接处理,需要进行 json 提取,网上找了一堆,发现json 四种解析格式,在此记录一下 www-form-urlenc ...