標籤:style blog http os 使用 ar java sp 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#【轉】,覺得文章寫的不錯就轉來啦!著作權不在我