編寫高性能的.NET代碼

編寫高性能的.NET代碼
定價:354
NT $ 308
  • 作者:(美)BEN WATSON
  • 出版社:人民郵電出版社
  • 出版日期:2017-08-01
  • 語言:簡體中文
  • ISBN10:7115461910
  • ISBN13:9787115461919
  • 裝訂:212頁 / 普通級 / 1-1
 

內容簡介

本書詳細介紹了如何編寫高性能的.NET程序,在zui大化托管代碼性能的同時,還能保證.NET的特性優勢。

本書循序漸進地深入.NET的各個部分,特別是底層的公共語言運行時(Common Language Runtime,CLR),了解CLR是如何完成內存管理、代碼編譯、並發處理等工作的。本書還詳細介紹了.NET的架構,探討了編程方式如何影響程序的整體性能,在全書中,還分享了發生在微軟的一些趣聞軼事。

本書的內容偏重於服務器程序,但幾乎所有內容也同樣適用於桌面端和移動端應用程序。

本書條理清楚,言簡意賅,適合有一定.NET基礎的讀者和想要提高代碼性能的C#程序員學習參考。

Ben Watson從2008年開始就已經是微軟的軟件工程師了。他在必應(Bing)平台的研發團隊工作時,建立了一套世界一流、基於.NET的高性能服務應用,足以應付幾千台電腦發起的大容量、低延遲請求,用戶數量高達幾百萬。他在業余時間喜歡參加地理尋寶游戲、閱讀各種書籍、欣賞古典音樂,享受與妻子Leticia、女兒Emma的歡聚時刻。他還是《C# 4.0 How-To》一書的作者,該書已由Sams出版。

戴旭,1973年生,浙江蕭山人,西安建築科技大學計算機應用學士,杭州電子科技大學軟件工程碩士,高級項目管理師。
 

目錄

第1章 性能評估及工具 1
1.1 選擇評估內容 1
1.2 平均值還是百分位值 3
1.3 評估工具 4
1.3.1 Visual Studio 5
1.3.2 性能計數器 7
1.3.3 ETW事件 13
1.3.4 PerfView 15
1.3.5 CLR Profiler 18
1.3.6 Windbg 20
1.3.7 .NETIL分析器 24
1.3.8 MeasureIt 25
1.3.9 代碼中的工具 25
1.3.10 SysInternals工具 26
1.3.11 數據庫 26
1.3.12 其他工具 27
1.3.13 評估本身的開銷 27
1.4 小結 27

第2章 垃圾回收 28
2.1 基本運作方式 30
2.2 配置參數 33
2.2.1 工作站模式還是服務器模式 33
2.2.2 后台垃圾回收 34
2.2.3 低延遲模式(Low Latency Mode) 35
2.3 減少內存分配量 36
2.4 首要規則 37
2.5 縮短對象的生存期 37
2.6 減少對象樹的深度 38
2.7 減少對象間的引用 38
2.8 避免對象固定 38
2.9 避免使用終結方法 39
2.10 避免分配大對象 40
2.11 避免緩沖區復制 41
2.12 對長期存活對象和大型對象進行池化 41
2.13 減少LOH的碎片整理 45
2.14 某些場合可以強制執行完全回收 46
2.15 必要時對LOH進行碎片整理 47
2.16 在垃圾回收之前獲得通知 47
2.17 用弱引用作為緩存 50
2.18 評估和研究垃圾回收性能 51
2.18.1 性能計數器 51
2.18.2 ETW事件 52
2.18.3 垃圾回收的耗時 53
2.18.4 內存分配的發生時機 54
2.18.5 查看已在LOH中分配內存的對象 55
2.18.6 查看內存堆中的全部對象 57
2.18.7 為什麼對象沒有被回收 60
2.18.8 哪些對象被固定着 61
2.18.9 內存碎片的產生時機 63
2.18.10 對象位於第幾代內存堆中 67
2.18.11 第0代內存堆中存活着哪些對象 68
2.18.12 誰在顯式調用GC.Collect方法 70
2.18.13 進程中存在哪些弱引用 70
2.19 小結 71

第3章 JIT編譯 72
3.1 JIT編譯的好處 73
3.2 JIT編譯的開銷 73
3.3 JIT編譯器優化 75
3.4 減少JIT編譯時間和程序啟動時間 76
3.5 利用Profile優化JIT編譯 78
3.6 使用NGEN的時機 78
3.6.1 NGEN本機映像的優化 79
3.6.2 本機代碼生成 80
3.7 JIT無法勝任的場合 80
3.8 評估 81
3.8.1 性能計數器 81
3.8.2 ETW事件 82
3.8.3 找出JIT耗時最長的方法和模塊 82
3.9 小結 83

第4章 異步編程 84
4.1 使用Task 86
4.2 並行循環 89
4.3 避免阻塞 92
4.4 在非阻塞式I/O中使用Task 92
4.4.1 適應Task的異步編程模式 94
4.4.2 使用高效I/O 96
4.5 async和await 97
4.6 編程結構上的注意事項 99
4.7 正確使用Timer對象 100
4.8 合理設置線程池的初始大小 101
4.9 不要中止線程 102
4.10 不要改變線程的優先級 102
4.11 線程同步和鎖 103
4.11.1 真的需要操心性能嗎 103
4.11.2 我真的需要用到同步鎖嗎 104
4.11.3 多種同步機制的選擇 105
4.11.4 內存模型 106
4.11.5 必要時使用volatile 106
4.11.6 使用Interlocked方法 108
4.11.7 使用Monitor(鎖) 110
4.11.8 該在什麼對象上加鎖 112
4.11.9 異步鎖 112
4.11.10 其他加鎖機制 115
4.11.11 可並發訪問的集合類 116
4.11.12 使用更大范圍的鎖 116
4.11.13 替換整個集合 117
4.11.14 將資源復制給每個線程 118
4.12 評估 118
4.12.1 性能計數器 118
4.12.2 ETW事件 119
4.12.3 查找爭用情況最嚴重的鎖 120
4.12.4 查找線程在I/O的阻塞位置 120
4.12.5 利用Visual Studio可視化展示Task和線程 121
4.13 小結 122

第5章 編碼和類設計的一般規則 123
5.1 類和「結構」的對比 123
5.2 重寫「結構」的Equals和GetHashCode方法 126
5.3 虛方法和密封類 128
5.4 接口的分發(Dispatch) 128
5.5 避免裝箱 129
5.6 for和foreach的對比 131
5.7 強制類型轉換 133
5.8 P/Invoke 134
5.9 委托 136
5.10 異常 137
5.11 dynamic 138
5.12 自行生成代碼 141
5.13 預處理 146
5.14 評估 146
5.14.1 ETW事件 146
5.14.2 查找裝箱指令 147
5.14.3 第一時間發現「異常」 149
5.15 小結 150

第6章 使用.NET Framework 151
6.1 全面了解所用API 151
6.2 多個API殊途同歸 152
6.3 集合類 152
6.3.1 泛型集合類 153
6.3.2 可並發訪問的集合類 154
6.3.3 其他集合類 156
6.3.4 創建自定義集合類型 156
6.4 字符串 157
6.4.1 字符串比較 157
6.4.2 ToLower和ToUpper 158
6.4.3 字符串拼接 158
6.4.4 字符串格式化 158
6.4.5 ToString 159
6.4.6 避免字符串解析 159
6.5 應避免使用正常情況下也會拋出「異常」的API 159
6.6 避免使用會在LOH分配內存的API 159
6.7 使用延遲初始化 160
6.8 枚舉的驚人開銷 161
6.9 對時間的跟蹤記錄 162
6.10 正則表達式 164
6.11 LINQ 164
6.12 讀取文件 165
6.13 優化HTTP參數及網絡通訊 166
6.14 反射 167
6.15 評估 168
6.16 性能計數器 168
6.17 小結 169

第7章 性能計數器 170
7.1 使用已有的計數器 170
7.2 創建自定義計數器 171
7.2.1 Averages 172
7.2.2 Instantaneous 173
7.2.3 Deltas 173
7.2.4 Percentages 173
7.3 小結 174

第8章 ETW事件 175
8.1 定義事件 175
8.2 在PerfView中使用自定義事件 178
8.3 創建自定義ETW事件Listener 179
8.4 獲取EventSource的詳細信息 184
8.5 自定義PerfView分析插件 186
8.6 小結 189

第9章 Windows Phone 190
9.1 評估工具 190
9.2 垃圾回收和內存 191
9.3 JIT 191
9.4 異步編程和內存模式 192
9.5 其他問題 193
9.6 小結 193

第10章 代碼安全性 194
10.1 充分理解底層的操作系統、API和硬件 194
10.2 把API調用限制在一定范圍的代碼內 194
10.3 把性能要求很高、難度很大的代碼集中起來並加以抽象 199
10.4 把非托管代碼和不安全代碼隔離出來 200
10.5 除非有證據證明,不然代碼清晰度比性能更重要 200
10.6 小結 200

第11章 建立追求性能的開發團隊 201
11.1 了解最影響性能的關鍵區域 201
11.2 有效的測試 201
11.3 性能測試平台和自動化 202
11.4 只認數據 203
11.5 有效的代碼復查 203
11.6 訓練 204
11.7 小結 205

附錄A 盡快啟動對應用程序的性能討論 206
定義指標 206
分析CPU占用情況 206
分析內存占用情況 206
分析JIT 207
分析異步執行性能 207

附錄B 大O表示法 209
常見算法及其復雜度 211
排序算法 211
圖論算法 211
查找算法 212
特殊案例 212
附錄C 參考文獻 213
參考書籍 213
相關人士及博客 213
網路書店 類別 折扣 價格
  1. 新書
    87
    $308