C#vs Java哪一个更快? 将25k C#转换为Java(2)
在上一篇文章中,我描述了如何將25k行C#轉換為Java以及從該練習中學到的教訓。
我收到以下問題:
順便說一句很棒的文章。 遷移代碼后,性能與C#版本相比如何?
改寫系統的動機之一是使系統變得更快,而實際上這一目標得以實現。 我們設法將硬件數量減少了5倍,同時仍將系統的吞吐量提高了6倍。這給客戶帶來了很多好處。
最初的假設是C#實際上并不比Java慢,并且我們必須實現一些高級技術才能獲得顯著的性能提升。 發生這種情況時,只需重新編寫系統即可獲得收益。
那么C#比Java慢嗎? 一言以蔽之。 雖然我沒有在可比較的硬件上運行任何正式的基準測試,但我的軼事證據是,在類似情況下,性能是可比的。 但是我發現確實很容易在C#中圍繞數據訪問構建一個錯誤的系統。
C#和SqlServer之間存在極其緊密的聯系。 Visual Studio實際上是兩者的前端。 有趣的是,我遇到的C#開發人員與SQLServer一樣精通C#。 畢竟,幾乎所有系統都需要處理存儲在數據庫中的數據,這聽起來不錯,因此兩者之間的緊密集成應該是可行的方法。 好,是的,不是。 擁有出色的工具和技能以使您能夠訪問和操縱數據真是太好了,但絕不能忘記“數據聊天”的性能成本。
我正在使用的系統的主要問題是數據訪問已緊密集成到代碼中。 每當需要一條數據時,都會對數據庫進行調用。 實際上,在某些情況下,可以在代碼中執行的邏輯是在SQLServer的存儲過程中執行的。 只要計算出結果,就將其寫回到數據庫中。 不僅效率極低,而且使系統更難以理解。
我們要做的第一件事是在數據和代碼之間建立清晰的分隔。 使用bcp從數據庫中批量導出了程序運行所需的所有數據,這些文件用于創建保存在程序存儲器中的對象。 一旦計算出所有結果,它們就會被寫入文件,然后bcp備份到數據庫中。 這消除了程序與服務器之間不斷的“閑聊”,并大大加快了系統速度。 這也使系統的輸入和輸出非常透明。 將數據庫調用掩埋在代碼中會使輸入和輸出變得相當不透明。
因為我們使用的是Java,并且無法訪問與SQLServer的緊密耦合,所以我們被迫遵循一項重要的良好實踐,即“從處理過程中分離數據”。 這是實現性能改進的關鍵。
所有這些都不表示C#,SQLServer和Visual Studio之間的集成是一件壞事。 實際上,恰恰相反,它是一個非常強大的工具,如果不加理解和小心處理,與所有強大工具一樣,這將是危險的。
翻譯自: https://www.javacodegeeks.com/2015/05/c-vs-java-which-one-is-faster-translating-25k-c-into-java-2.html
總結
以上是生活随笔為你收集整理的C#vs Java哪一个更快? 将25k C#转换为Java(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 9个最佳时尚标识以及如何免费打造自己的标
- 下一篇: 9个最佳部族标识以及如何免费制作自己的[
