像這樣玩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#與腳本的互動也很簡單(PowershellIronXXX)。

一旦你掌握了.NetC#。等於手中握了一把神器。當然,這個掌握要求很高,不是那些什么必知啊、精通啊、面試必考的那些東西。而是一些更簡單更精髓的東東。

下面,以最近做的兩個項目來展示下,神器應該怎么玩。

(1)高性能開發

這個項目是一個對性能要求非常高非常高非常高非常高的實時視頻分析項目。因為商業原因,具體細節不方便透露。本項目最開始的版本我是用的純C#開發,因為是圖像與視頻項目,我打開了unsafe,用上了指針和非托管內存。項目中有一個核心算法,大部分運行時間耗在這個算法上面,寫完之后,我發現,我寫的這個C#版算法比國內外同行用C++實現的快幾十倍。分辨率差不多的話,他們處理一幀約需要1秒左右,而我只需要幾十毫秒。

舉這個例子不是想說C#C++快。實際上根據我這兩年對unsafe C# 指針的應用來看,一個寫的好的非托管C#代碼,性能約是C代碼的四分之三。可為什么在實戰中有這么好的性能呢,C#下我們可以對開發任務做如下分解:對於性能不關鍵的地方使用托管程序,對於性能關鍵的地方使用非托管程序,即使是使用指針的非托管編程,C#下的開發效率也比CC++快得多。這樣一來,我的精力全部集中於關鍵地方的實現了,我就有更好的心情和更多的時間來進行優化,優化的結果就是,C#版的算法反而比C/C++的快。

也就是說,理論上,C/C++C# unsafe30%,但是在實踐上,加上時間和資源的約束,反而可能是C#的代碼更快。

當然,我這個算法的性能還不夠高,達不到實時的目的。最終版本,核心算法用CUDA實現,外圍算法用C# unsafe實現的。

如果我在Win7下開發,我不認為我有需要C++的地方。當然,C還是需要的,很多時候,要和硬件打交道。

一般搞圖像和視頻的都用matlabC++,或者兩個都用。其中,matlab設計算法,C++來重寫以提高性能。而用C# unsafe,一個頂這兩個,用它來設計算法,工作效率堪比matlab,運行性能堪比C++,且可以直接上線運行。

(2)快速原型開發

.Net 做原型開發是非常爽的。刷刷刷,很快就搞出來了。

這是一個數字版權管理的項目,項目整體方案是我設計的,我要驗證這個方案具有可行性,因此,需要快速開發出一個原型出來。一二三四五,五個程序,一天一夜就搞出來了,項目的主要風險全部消滅。錢到手。

其實C#還有些新玩法。因為C# unsafe代碼和C代碼很像,我在想,能不能寫個工具直接將C#算法代碼翻譯為C代碼,為C帶來強大的生產力。C是萬金油,哪里都能用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM