您当前的位置:首页 > 编写高性能的.NET代码 > 下载地址2
编写高性能的.NET代码
- 名 称:编写高性能的.NET代码 - 下载地址2
- 类 别:计算机与网络
- 下载地址:[下载地址2]
- 提 取 码:
- 浏览次数:3
新闻评论(共有 0 条评论) |
资料介绍
编写高性能的.NET代码
出版时间:2017
内容简介
本书详细介绍了如何编写高性能的.NET程序,在zui大化托管代码性能的同时,还能保证.NET的特性优势。本书循序渐进地深入.NET的各个部分,特别是底层的公共语言运行时(Common Language Runtime,CLR),了解CLR是如何完成内存管理、代码编译、并发处理等工作的。本书还详细介绍了.NET的架构,探讨了编程方式如何影响程序的整体性能,在全书中,还分享了发生在微软的一些趣闻轶事。本书的内容偏重于服务器程序,但几乎所有内容也同样适用于桌面端和移动端应用程序。 本书条理清楚,言简意赅,适合有一定.NET基础的读者和想要提高代码性能的C#程序员学习参考。
目录
第1章 性能评估及工具/t1
1.1 选择评估内容/t1
1.2 平均值还是百分位值/t3
1.3 评估工具/t4
1.3.1 Visual Studio/t5
1.3.2 性能计数器/t7
1.3.3 ETW事件/t13
1.3.4 PerfView/t15
1.3.5 CLR Profiler/t18
1.3.6 Windbg/t20
1.3.7 .NET IL分析器/t24
1.3.8 MeasureIt/t25
1.3.9 代码中的工具/t25
1.3.10 SysInternals工具/t26
1.3.11 数据库/t26
1.3.12 其他工具/t27
1.3.13 评估本身的开销/t27
1.4 小结/t27
第2章 垃圾回收/t28
2.1 基本运作方式/t30
2.2 配置参数/t33
2.2.1 工作站模式还是服务器模式/t33
2.2.2 后台垃圾回收/t34
2.2.3 低延迟模式
(Low Latency Mode)/t35
2.3 减少内存分配量/t36
2.4 首要规则/t37
2.5 缩短对象的生存期/t37
2.6 减少对象树的深度/t38
2.7 减少对象间的引用/t38
2.8 避免对象固定/t38
2.9 避免使用终结方法/t39
2.10 避免分配大对象/t40
2.11 避免缓冲区复制/t41
2.12 对长期存活对象和大型对象进行
池化/t41
2.13 减少LOH的碎片整理/t45
2.14 某些场合可以强制执行完全
回收/t46
2.15 必要时对LOH进行碎片
整理/t47
2.16 在垃圾回收之前获得通知/t47
2.17 用弱引用作为缓存/t50
2.18 评估和研究垃圾回收性能/t51
2.18.1 性能计数器/t51
2.18.2 ETW事件/t52
2.18.3 垃圾回收的耗时/t53
2.18.4 内存分配的发生时机/t54
2.18.5 查看已在LOH中分配内存的
对象/t55
2.18.6 查看内存堆中的全部对象/t57
2.18.7 为什么对象没有被回收/t60
2.18.8 哪些对象被固定着/t61
2.18.9 内存碎片的产生时机/t63
2.18.10 对象位于第几代内存堆中/t67
2.18.11 第0代内存堆中存活着哪些
对象/t68
2.18.12 谁在显式调用GC.Collect
方法/t70
2.18.13 进程中存在哪些弱引用/t70
2.19 小结/t71
第3章 JIT编译/t72
3.1 JIT编译的好处/t73
3.2 JIT编译的开销/t73
3.3 JIT编译器优化/t75
3.4 减少JIT编译时间和程序启动
时间/t76
3.5 利用Profile优化JIT编译/t78
3.6 使用NGEN的时机/t78
3.6.1 NGEN本机映像的优化/t79
3.6.2 本机代码生成/t80
3.7 JIT无法胜任的场合/t80
3.8 评估/t81
3.8.1 性能计数器/t81
3.8.2 ETW事件/t82
3.8.3 找出JIT耗时最长的方法和
模块/t82
3.9 小结/t83
第4章 异步编程/t84
4.1 使用Task/t86
4.2 并行循环/t89
4.3 避免阻塞/t92
4.4 在非阻塞式I/O中使用Task/t92
4.4.1 适应Task的异步编程模式/t94
4.4.2 使用高效I/O/t96
4.5 async和await/t97
4.6 编程结构上的注意事项/t99
4.7 正确使用Timer对象/t100
4.8 合理设置线程池的初始大小/t101
4.9 不要中止线程/t102
4.10 不要改变线程的优先级/t102
4.11 线程同步和锁/t103
4.11.1 真的需要操心性能吗/t103
4.11.2 我真的需要用到同步锁吗/t104
4.11.3 多种同步机制的选择/t105
4.11.4 内存模型/t106
4.11.5 必要时使用volatile/t106
4.11.6 使用Interlocked方法/t108
4.11.7 使用Monitor(锁)/t110
4.11.8 该在什么对象上加锁/t112
4.11.9 异步锁/t112
4.11.10 其他加锁机制/t115
4.11.11 可并发访问的集合类/t116
4.11.12 使用更大范围的锁/t116
4.11.13 替换整个集合/t117
4.11.14 将资源复制给每个线程/t118
4.12 评估/t118
4.12.1 性能计数器/t118
4.12.2 ETW事件/t119
4.12.3 查找争用情况最严重的锁/t120
4.12.4 查找线程在I/O的阻塞位置/t120
4.12.5 利用Visual Studio可视化展示
Task和线程/t121
4.13 小结/t122
第5章 编码和类设计的一般规则/t123
5.1 类和“结构”的对比/t123
5.2 重写“结构”的Equals和
GetHashCode方法/t126
5.3 虚方法和密封类/t128
5.4 接口的分发(Dispatch)/t128
5.5 避免装箱/t129
5.6 for和foreach的对比/t131
5.7 强制类型转换/t133
5.8 P/Invoke/t134
5.9 委托/t136
5.10 异常/t137
5.11 dynamic/t138
5.12 自行生成代码/t141
5.13 预处理/t146
5.14 评估/t146
5.14.1 ETW事件/t146
5.14.2 查找装箱指令/t147
5.14.3 第一时间发现“异常”/t149
5.15 小结/t150
第6章 使用.NET Framework/t151
6.1 全面了解所用API/t151
6.2 多个API殊途同归/t152
6.3 集合类/t152
6.3.1 泛型集合类/t153
6.3.2 可并发访问的集合类/t154
6.3.3 其他集合类/t156
6.3.4 创建自定义集合类型/t156
6.4 字符串/t157
6.4.1 字符串比较/t157
6.4.2 ToLower和ToUpper/t158
6.4.3 字符串拼接/t158
6.4.4 字符串格式化/t158
6.4.5 ToString/t159
6.4.6 避免字符串解析/t159
6.5 应避免使用正常情况下也会抛出
“异常”的API/t159
6.6 避免使用会在LOH分配内存的
API/t159
6.7 使用延迟初始化/t160
6.8 枚举的惊人开销/t161
6.9 对时间的跟踪记录/t162
6.10 正则表达式/t164
6.11 LINQ/t164
6.12 读取文件/t165
6.13 优化HTTP参数及网络
通讯/t166
6.14 反射/t167
6.15 评估/t168
6.16 性能计数器/t168
6.17 小结/t169
第7章 性能计数器/t170
7.1 使用已有的计数器/t170
7.2 创建自定义计数器/t171
7.2.1 Averages/t172
7.2.2 Instantaneous/t173
7.2.3 Deltas/t173
7.2.4 Percentages/t173
7.3 小结/t174
第8章 ETW事件/t175
8.1 定义事件/t175
8.2 在PerfView中使用自定义
事件/t178
8.3 创建自定义ETW事件
Listener/t179
8.4 获取EventSource的详细
信息/t184
8.5 自定义PerfView分析插件/t186
8.6 小结/t189
第9章 Windows Phone/t190
9.1 评估工具/t190
9.2 垃圾回收和内存/t191
9.3 JIT/t191
9.4 异步编程和内存模式/t192
9.5 其他问题/t193
9.6 小结/t193
第10章 代码安全性/t194
10.1 充分理解底层的操作系统、API
和硬件/t194
10.2 把API调用限制在一定范围的
代码内/t194
10.3 把性能要求很高、难度很大的
代码集中起来并加以抽象/t199
10.4 把非托管代码和不安全代码
隔离出来/t200
10.5 除非有证据证明,不然代码清晰
度比性能更重要/t200
10.6 小结/t200
第11章 建立追求性能的开发团队/t201
11.1 了解最影响性能的关键
区域/t201
11.2 有效的测试/t201
11.3 性能测试平台和自动化/t202
11.4 只认数据/t203
11.5 有效的代码复查/t203
11.6 训练/t204
11.7 小结/t205
附录A 尽快启动对应用程序的性能
讨论/t206
定义指标/t206
分析CPU占用情况/t206
分析内存占用情况/t206
分析JIT/t207
分析异步执行性能/t207
附录B 大O表示法/t209
常见算法及其复杂度/t211
排序算法/t211
图论算法/t211
查找算法/t212
特殊案例/t212
附录C 参考文献/t213
参考书籍/t213
相关人士及博客/t213
出版时间:2017
内容简介
本书详细介绍了如何编写高性能的.NET程序,在zui大化托管代码性能的同时,还能保证.NET的特性优势。本书循序渐进地深入.NET的各个部分,特别是底层的公共语言运行时(Common Language Runtime,CLR),了解CLR是如何完成内存管理、代码编译、并发处理等工作的。本书还详细介绍了.NET的架构,探讨了编程方式如何影响程序的整体性能,在全书中,还分享了发生在微软的一些趣闻轶事。本书的内容偏重于服务器程序,但几乎所有内容也同样适用于桌面端和移动端应用程序。 本书条理清楚,言简意赅,适合有一定.NET基础的读者和想要提高代码性能的C#程序员学习参考。
目录
第1章 性能评估及工具/t1
1.1 选择评估内容/t1
1.2 平均值还是百分位值/t3
1.3 评估工具/t4
1.3.1 Visual Studio/t5
1.3.2 性能计数器/t7
1.3.3 ETW事件/t13
1.3.4 PerfView/t15
1.3.5 CLR Profiler/t18
1.3.6 Windbg/t20
1.3.7 .NET IL分析器/t24
1.3.8 MeasureIt/t25
1.3.9 代码中的工具/t25
1.3.10 SysInternals工具/t26
1.3.11 数据库/t26
1.3.12 其他工具/t27
1.3.13 评估本身的开销/t27
1.4 小结/t27
第2章 垃圾回收/t28
2.1 基本运作方式/t30
2.2 配置参数/t33
2.2.1 工作站模式还是服务器模式/t33
2.2.2 后台垃圾回收/t34
2.2.3 低延迟模式
(Low Latency Mode)/t35
2.3 减少内存分配量/t36
2.4 首要规则/t37
2.5 缩短对象的生存期/t37
2.6 减少对象树的深度/t38
2.7 减少对象间的引用/t38
2.8 避免对象固定/t38
2.9 避免使用终结方法/t39
2.10 避免分配大对象/t40
2.11 避免缓冲区复制/t41
2.12 对长期存活对象和大型对象进行
池化/t41
2.13 减少LOH的碎片整理/t45
2.14 某些场合可以强制执行完全
回收/t46
2.15 必要时对LOH进行碎片
整理/t47
2.16 在垃圾回收之前获得通知/t47
2.17 用弱引用作为缓存/t50
2.18 评估和研究垃圾回收性能/t51
2.18.1 性能计数器/t51
2.18.2 ETW事件/t52
2.18.3 垃圾回收的耗时/t53
2.18.4 内存分配的发生时机/t54
2.18.5 查看已在LOH中分配内存的
对象/t55
2.18.6 查看内存堆中的全部对象/t57
2.18.7 为什么对象没有被回收/t60
2.18.8 哪些对象被固定着/t61
2.18.9 内存碎片的产生时机/t63
2.18.10 对象位于第几代内存堆中/t67
2.18.11 第0代内存堆中存活着哪些
对象/t68
2.18.12 谁在显式调用GC.Collect
方法/t70
2.18.13 进程中存在哪些弱引用/t70
2.19 小结/t71
第3章 JIT编译/t72
3.1 JIT编译的好处/t73
3.2 JIT编译的开销/t73
3.3 JIT编译器优化/t75
3.4 减少JIT编译时间和程序启动
时间/t76
3.5 利用Profile优化JIT编译/t78
3.6 使用NGEN的时机/t78
3.6.1 NGEN本机映像的优化/t79
3.6.2 本机代码生成/t80
3.7 JIT无法胜任的场合/t80
3.8 评估/t81
3.8.1 性能计数器/t81
3.8.2 ETW事件/t82
3.8.3 找出JIT耗时最长的方法和
模块/t82
3.9 小结/t83
第4章 异步编程/t84
4.1 使用Task/t86
4.2 并行循环/t89
4.3 避免阻塞/t92
4.4 在非阻塞式I/O中使用Task/t92
4.4.1 适应Task的异步编程模式/t94
4.4.2 使用高效I/O/t96
4.5 async和await/t97
4.6 编程结构上的注意事项/t99
4.7 正确使用Timer对象/t100
4.8 合理设置线程池的初始大小/t101
4.9 不要中止线程/t102
4.10 不要改变线程的优先级/t102
4.11 线程同步和锁/t103
4.11.1 真的需要操心性能吗/t103
4.11.2 我真的需要用到同步锁吗/t104
4.11.3 多种同步机制的选择/t105
4.11.4 内存模型/t106
4.11.5 必要时使用volatile/t106
4.11.6 使用Interlocked方法/t108
4.11.7 使用Monitor(锁)/t110
4.11.8 该在什么对象上加锁/t112
4.11.9 异步锁/t112
4.11.10 其他加锁机制/t115
4.11.11 可并发访问的集合类/t116
4.11.12 使用更大范围的锁/t116
4.11.13 替换整个集合/t117
4.11.14 将资源复制给每个线程/t118
4.12 评估/t118
4.12.1 性能计数器/t118
4.12.2 ETW事件/t119
4.12.3 查找争用情况最严重的锁/t120
4.12.4 查找线程在I/O的阻塞位置/t120
4.12.5 利用Visual Studio可视化展示
Task和线程/t121
4.13 小结/t122
第5章 编码和类设计的一般规则/t123
5.1 类和“结构”的对比/t123
5.2 重写“结构”的Equals和
GetHashCode方法/t126
5.3 虚方法和密封类/t128
5.4 接口的分发(Dispatch)/t128
5.5 避免装箱/t129
5.6 for和foreach的对比/t131
5.7 强制类型转换/t133
5.8 P/Invoke/t134
5.9 委托/t136
5.10 异常/t137
5.11 dynamic/t138
5.12 自行生成代码/t141
5.13 预处理/t146
5.14 评估/t146
5.14.1 ETW事件/t146
5.14.2 查找装箱指令/t147
5.14.3 第一时间发现“异常”/t149
5.15 小结/t150
第6章 使用.NET Framework/t151
6.1 全面了解所用API/t151
6.2 多个API殊途同归/t152
6.3 集合类/t152
6.3.1 泛型集合类/t153
6.3.2 可并发访问的集合类/t154
6.3.3 其他集合类/t156
6.3.4 创建自定义集合类型/t156
6.4 字符串/t157
6.4.1 字符串比较/t157
6.4.2 ToLower和ToUpper/t158
6.4.3 字符串拼接/t158
6.4.4 字符串格式化/t158
6.4.5 ToString/t159
6.4.6 避免字符串解析/t159
6.5 应避免使用正常情况下也会抛出
“异常”的API/t159
6.6 避免使用会在LOH分配内存的
API/t159
6.7 使用延迟初始化/t160
6.8 枚举的惊人开销/t161
6.9 对时间的跟踪记录/t162
6.10 正则表达式/t164
6.11 LINQ/t164
6.12 读取文件/t165
6.13 优化HTTP参数及网络
通讯/t166
6.14 反射/t167
6.15 评估/t168
6.16 性能计数器/t168
6.17 小结/t169
第7章 性能计数器/t170
7.1 使用已有的计数器/t170
7.2 创建自定义计数器/t171
7.2.1 Averages/t172
7.2.2 Instantaneous/t173
7.2.3 Deltas/t173
7.2.4 Percentages/t173
7.3 小结/t174
第8章 ETW事件/t175
8.1 定义事件/t175
8.2 在PerfView中使用自定义
事件/t178
8.3 创建自定义ETW事件
Listener/t179
8.4 获取EventSource的详细
信息/t184
8.5 自定义PerfView分析插件/t186
8.6 小结/t189
第9章 Windows Phone/t190
9.1 评估工具/t190
9.2 垃圾回收和内存/t191
9.3 JIT/t191
9.4 异步编程和内存模式/t192
9.5 其他问题/t193
9.6 小结/t193
第10章 代码安全性/t194
10.1 充分理解底层的操作系统、API
和硬件/t194
10.2 把API调用限制在一定范围的
代码内/t194
10.3 把性能要求很高、难度很大的
代码集中起来并加以抽象/t199
10.4 把非托管代码和不安全代码
隔离出来/t200
10.5 除非有证据证明,不然代码清晰
度比性能更重要/t200
10.6 小结/t200
第11章 建立追求性能的开发团队/t201
11.1 了解最影响性能的关键
区域/t201
11.2 有效的测试/t201
11.3 性能测试平台和自动化/t202
11.4 只认数据/t203
11.5 有效的代码复查/t203
11.6 训练/t204
11.7 小结/t205
附录A 尽快启动对应用程序的性能
讨论/t206
定义指标/t206
分析CPU占用情况/t206
分析内存占用情况/t206
分析JIT/t207
分析异步执行性能/t207
附录B 大O表示法/t209
常见算法及其复杂度/t211
排序算法/t211
图论算法/t211
查找算法/t212
特殊案例/t212
附录C 参考文献/t213
参考书籍/t213
相关人士及博客/t213