程式語言與效能 - 工程師

Barb Cronin avatar
By Barb Cronin
at 2015-01-31T00:00

Table of Contents

小弟是個社會新鮮人應徵了工程師的職務(小公司)
小弟的公司是做商業軟體的,公司給我的任務就是把數據與公式寫到程式裡面
並且讓資料顯示出來的方式與儲存的格式達到主管的要求
目前做了寫個月寫了四支程式(未來將把四支程式整合在同一支)
公司所使用的語言是VB.NET 不過最近發現程式執行速度非常的緩慢
稍微看了一下網上的資訊
1.在NET底下所有的語言執行速度都是一樣的
2.VB並沒有比C#還差
不過有稍微看一下一些大大的實測數據
並沒有所有的語言都一樣快,反編譯出來一樣的寫法會出現不一樣的程式碼
這讓VC++ NET 比 VB NET(開啟最佳程式碼) 還要快
這麼說如果改用VC++ NET會不會比使用 VB NET好"很"多呢?
如果改用JAVA會不會有所改善呢?
(PS:程式有關係到數字統計與分析 在相同演算法的情況下相比)
未來有可能要讓手機也能看到結果OR操作不過還沒定案
已更新項目:
如果只是差距不大的話當然是改演算法就沒問題了
不過VC跟VB同樣在NET上面跑 有看過篇文章說測試之後VC快了55%左右
因為這程式完成以後下一個程式採用何種方式完成公司是讓我自行決定
所以在想是不是這幾種語言之間會有效能上的差距
另外我們公司要寫的程式都是用畫圖方式呈現
如果說每個互動方式都是使用物件的話需要動態建立13500個物件
所以目前所有的物件都是用"畫"的在判斷滑鼠座標跟卷軸位置
這導致我很多的時間都是用在計算位置上
(PS:小弟其實也不喜歡使用VB 以前慣用的是JAVA)
2 個已更新項目:
不瞞大大老實說,小弟真的沒什麼物件導向的觀念 公司非常小寫軟件的工程師剩下小第一人了
程式語言一開始確實是說好使用 VB.NET 不過基於速度一直無法大幅增加才想到是否換語言
至於那個13500個物件剛開始是採用有多少筆資料就建立多少個物件*9(PS:checkbox textbox)
採用方法是只要變更資料就動態刪除再新增導致第一版速度非常的慢
不過需要建立大量物件那頁改用畫的以後速度已經可以接受了
3 個已更新項目:
另一頁需要建立一個多元數深度為10 互動式增加(可新增.移除.改名)
慢在計算位置那個副程式其中一筆資料新增或移除會導致大部分的位置改變(向左或向右)
所以是把畫布清空 然後重新計算
確實有非常多的不必要計算不過在資料數量增加就會出錯(已知演算法問題)
這個副程式最"佳"速度為O(n) (必須資料剛好達到限定的最大值)
程式碼總共約9500行而已如果真需要大改那直接重寫可能也不會花太久
這時是否該把語言一併換掉比較乾脆呢? (小弟一開始的想法是這樣)
寫法也是很直覺(由第一筆資料開始尋找到最後一筆)
4 個已更新項目:
另外還有個疑問
不再全域畫布畫速度引響真的很大嗎?(目前所有畫布接放在全域變數那邊)
還有,可以請大大舉例如何使用相對關係計算嗎?
以及有沒有良好運用 CPU 快取的預測<這點小弟非常不解
是否是起用平行運算呢?
這點小弟有稍微試過可以使兩個CPU都跑到50%可是原始的程式只需要7秒開啟平行運算要10秒
有點納悶這是什麼情況下才會使效率提高呢?
5 個已更新項目:
感謝大大的指點~對於程式的寫法與演算法必須要重新調整了

All Comments

Annie avatar
By Annie
at 2015-02-04T07:56
您要不要改個演算法,我想功效會比從 VB 改成 VC 大得多很多。
2015-02-01 12:32:46 補充:
基本上不同演算法效能上的差異決不是差一點而已,適合與不適合的演算法效能可以是天差地遠;倒是不同程式語言之間效能的差異那才真是差一點,不信你可以自己試試看。
舉個例子,你不管怎麼修改程式,甚至用組合語言來寫,對於鏈結串列的查找效率提升會比我直接換二元樹還來得好嗎?
對於加速一個工作,基本上大致的步驟一定是(基本上以下改動對計算效率的影響大致遞減):
1. 分析效率是被哪一個模組給拖到了?不要搞半天根本搞錯東西!
2. 想想這個模組或這個程序使用的演算法是否合適?有沒有更好的可以用?
3. 看看自己寫的程式碼有沒有冗餘步驟?是否可以調整一下省略不必要的計算?
這方面學問不少,一些簡單的例子像:是不是有些不會變動的值被計算很多次?使不是只要算一次就可以了?有些地方是否可用整數運算取代浮點運算?乘取代除?加減取代乘?位元運算取代乘除運算?檔案操作是否太頻繁交錯?是否可以集中完成?以及有沒有良好運用 CPU 快取的預測等等,族繁不及被載。
4. 看看編譯器選項是否有調整空間?比方說最佳化選項等。
5. 最後才是考慮用不同的程式語言重新寫過。
不同程式語言除了效率上差異微小以外,還會面臨維護成本與重新開發成本等問題。另一方面,其實正常來講程式語言的選用都是在一開始就要決定好的。
另外,不要太相信什麼效率測試報告快 50% 之類的說法,那些通常都是在一些特殊條件下測到的結果,所以實際上玩家的使用心得和測試會比官方的測試更有參考性。不然你知道官方測試 Java 比 C++ 還快嗎?你相信在一般應用都是這樣嗎?
2015-02-01 12:44:13 補充:
另外我很好奇:
> 如果說每個互動方式都是使用物件的話需要動態建立13500個物件
提出這句話讓我覺得你似乎沒有物件導向的概念。
就算有十萬個物建好了,你是一個一個管這些物驗嗎?物件的分類和相互的隸屬關係都沒有嗎?白話一點就是哪些物件歸哪個物件管理這樣的隸屬關係,難道老闆需要下命令給每個員工?還是有些員工歸某些員工管?
> 所以目前所有的物件都是用"畫"的在判斷滑鼠座標跟卷軸位置
> 這導致我很多的時間都是用在計算位置上
這讓我覺得你連模組化的概念都沒有。
每一個物件都要自己在全域畫布上計算一次?用相對關係計算呢?參數往下傳遞呢?層次呢?
2015-02-01 13:41:29 補充:
補充說明:我上面提到的「Java 比 C++ 還快嗎?」的比較是與 Native C++ 比,而不是 Visual C++ Dot Net 比,不要搞錯了!
2015-02-01 23:02:14 補充:
> 程式語言一開始確實是說好使用 VB.NET 不過基於速度一直無法大幅增加才想到是否換語言
基本上會因為效率而更換程式語言的,通常都是對運算速度吹毛求疵的人才會做出的事情。比方一個氣象運算程式原來是用 C 寫的,改用 Fortran 寫後可能會快個 5% 到 8% 之類的。
但若你想要「大幅度」的加速運算速度,比方說 30%、70% 的話,那我幾乎可以告訴你,只靠更改程式語言是沒有用的。
2015-02-01 23:05:55 補充:
> 至於那個13500個物件剛開始是採用有多少筆資料就建立多少個物件*9(PS:checkbox textbox)
補充說明,通常我們依一個物件所管理的物件數量來判斷程式複雜度的時候,會將陣列看成是一個物件。所以一個包含了 13500 個元素的陣列會被當一個物件來算,因此你提的例子應該是要記為9個物件,這9個物件分別是9個陣列,每個陣列管裡有 13500 的物件。
2015-02-01 23:11:07 補充:
> 程式碼總共約9500行而已如果真需要大改那直接重寫可能也不會花太久
> 這時是否該把語言一併換掉比較乾脆呢? (小弟一開始的想法是這樣)
隨便你高興。以我的標準來說,一個檔案超過 1000 行我就嫌大了。
> 寫法也是很直覺(由第一筆資料開始尋找到最後一筆)
難怪會慢!
別告訴我說你們連鏈結串列都沒用上,用的是陣列。這樣的話資料插入和刪除本來就很慢,你們就算用組合語言寫也不會快的!
2015-02-01 23:48:20 補充:
> 不再全域畫布畫速度引響真的很大嗎?(目前所有畫布接放在全域變數那邊)
這對速度沒什麼影響,有時甚至會比較慢些。它有幫助的是對於程式的複雜度。
> 還有,可以請大大舉例如何使用相對關係計算嗎?
比方說對於一個按鈕,它只關心他相對於所屬視窗的位置,至於按鈕在螢幕上的位置則不知道。
> 以及有沒有良好運用 CPU 快取的預測<這點小弟非常不解
不明白也沒關係,程式還是可以執行。
> 這點小弟有稍微試過可以使兩個CPU都跑到50%可是原始的程式只需要7秒開啟平行運算要10秒
> 有點納悶這是什麼情況下才會使效率提高呢?
平型運算本來就是很多的學問。
Enid avatar
By Enid
at 2015-02-04T18:09
他跟你有 一樣的問題
TS777。CC
Lily avatar
By Lily
at 2015-01-31T02:11
想要賺錢嗎???
我覺得比基金.股票.黃金.定存 等等 都還要穩
利息也算OK的網路投資 一次終身 希望你可以來看看
http://migre.me/iFiHM 我的部落落~~
+我臉書~ 詳細可以加我好友
https://www.facebook.com/profile.php?id=1000021987...
我有專屬臉書社團 還有很多不需要錢就可以賺到 的事業 也歡迎你歐
Linda avatar
By Linda
at 2015-01-31T15:42
試試看R語言吧
1234567

我找工作好久都無消息

Dinah avatar
By Dinah
at 2015-01-30T00:00
我從10月多離職至今,離職原因是無法適應強制的加班變做5休1(12小時制)
所以投好多家公司,以及現場徵才都去 ...

~台積電或鴻海工程師年薪可破百萬嗎?

Hazel avatar
By Hazel
at 2015-01-26T00:00
~台積電或鴻海工程師年薪可破百萬嗎?~台積電或鴻海工程師年薪可破百萬嗎?目前業界最高薪應該是這兩家~不知哪� ...

畢業後重新開始的生涯規劃

Hardy avatar
By Hardy
at 2015-01-19T00:00
我是二專畢業,目前快要30歲了,但是之前過得太安逸,都沒為自己未來做鋪路!
所以,現在去就讀南部國立科�� ...

我想要增貸200,要找那家銀行

Suhail Hany avatar
By Suhail Hany
at 2015-01-19T00:00
您好,我想向銀行增貸200萬,請問我貸的出來嗎,我的月薪52000,如果貸的出來,我每個月要攤還的金額是多少?如 ...

友達複試完錄取機率?

Sierra Rose avatar
By Sierra Rose
at 2015-01-16T00:00
某天接到友達單位主管的電話通知面試(面試時才知道打電話的人是副理0.0)小弟是參加友達台中廠工程師的面試初� ...