[推薦文章]Top 10 Performance Mistakes/十大性能方面的错误
英文原文傳送門:https://www.infoq.com/articles/top-10-performance-mistakes
簡體中文傳送門:http://www.infoq.com/cn/articles/top-10-performance-mistakes
摘要:
10. Not Upgrading.
9. Duplicated Work.
8. Data Dependent Loads.
7. Too Much Allocation.
6. Going Parallel
5. Not Understanding TCP.
4. Synchronous Communications
3. Text Encoding.
2. API Design
1. Logging
--
Performance tuning 第一要務:找到 bottleneck
找 bottleneck 第一要務:資訊充足、避免黑箱。但如果為了資訊充足插了一堆 log, 你又中了第一個最常見的 performance 問題:Logging。
--
挑幾個來提我的經驗:
10. 不升級:有很多人用很舊的 OS 版本、DBMS 版本、framework 版本,本質上就是老牛拖慢車,車殼改造地再流線來降低風阻,引擎沒升級就是慢。
9. 不必要的重複的工作:這邊講的例子是不恰當地使用ORM。以 Entity Framework 當例子,請參考之前整理的討論串:https://www.facebook.com/91agile/posts/571836689657620
8. 使用錯誤的資料結構:不是只要放到 memory 就沒有存取效能的問題,各種資料結構在面對不同的存取操作時,Big O還是要參考一下,選擇最恰當的資料結構才會事半功倍。
7. GC 在回收 large object heap 時,是需要比較多時間的。(.NET 中 large object 指大於 85,000 bytes 的物件)
6. 濫用 Parallel: 只有1間廁所,有10個人在排隊,你排一隊搞不好還比排 10 隊來得快上不少。(通常廁所就是你的DB)
4. 同步處理的問題:同步就要等,非同步就要解決一致性問題、通知問題。在通訊上,請考慮是否使用 NIO 框架,如 Netty: http://mp.weixin.qq.com/s…
3. 序列化/反序列化:有時為了讓人看懂,就會使用序列化的技巧。但不必要用、濫用就會很吃CPU。
1. Logging:Log 一定要分類分級,而且一定要統一設定就可以進行各類各級的開關。在應付大量 request/transaction 時,能省掉的開銷都要省掉。
#performance
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
entity framework效能 在 91 敏捷開發之路 Facebook 的精選貼文
Entity Framework Performance and What You Can Do About It
傳送門:https://www.simple-talk.com/…/entity-framework-performance…/
很多時候 ORM 慢,不是本身慢,而是使用 ORM 的人犯了幾個不該犯的錯誤,下列列出該注意的事項:
① model還沒給條件,就觸發執行 SQL 的問題
② "N+1" Select 的問題(沒有一次把要用到的關聯資料撈出來)
③ Select * 欄位全撈的問題
④ DataType 不相符的問題
⑤ Miss Index 的問題
⑥ 如何讓查詢計畫 reuse 的問題,例如分頁查詢影響查詢參數的方式
⑦ 批次作業使用 BulkInsert 相關的 API 可以提升 10 倍以上的效能
⑧ 用 AddRange() 取代迴圈裡面的 Add(),搭配AutoDetectChangesEnabled 開關。
※ 範例的效能提升:reduced from 34 seconds down to 85 ms – a 400x speed boost!
⑨ 如果只是要讀資料,沒有要異動,透過 AsNoTracking 關掉 Change tracking。
其他的注意事項,請自行參考文章後半部細節。
#EntityFramework #程式不是會動就好