科技
类型
可以朗读
语音朗读
195千字
字数
2017-08-01
发行日期
展开全部
主编推荐语
本书条理清楚,言简意赅,适合有一定.NET基础的读者和想要提高代码性能的C#程序员学习参考。
内容简介
本书详细介绍了如何编写高性能的.NET程序,在zui大化托管代码性能的同时,还能保证.NET的特性优势。 本书循序渐进地深入.NET的各个部分,特别是底层的公共语言运行时(Common Language Runtime,CLR),了解CLR是如何完成内存管理、代码编译、并发处理等工作的。本书还详细介绍了.NET的架构,探讨了编程方式如何影响程序的整体性能,在全书中,还分享了发生在微软的一些趣闻轶事。本书的内容偏重于服务器程序,但几乎所有内容也同样适用于桌面端和移动端应用程序。
目录
- 版权信息
- 内容提要
- 作者简介
- 译者简介
- 技术编辑简介
- 前言
- 致谢
- 第1章性能评估及工具
- 1.1 选择评估内容
- 1.2 平均值还是百分位值
- 1.3 评估工具
- 1.3.1 Visual Studio国
- 1.3.2 性能计数器
- 1.3.3 ETW事件
- 1.3.4 PerfView国
- 1.3.5 CLR Profiler国
- 1.3.6 Windbg国
- 1.3.7 .NET IL分析器
- 1.3.8 MeasureIt国
- 1.3.9 代码中的工具
- 1.3.10 SysInternals工具
- 1.3.11 数据库
- 1.3.12 其他工具
- 1.3.13 评估本身的开销
- 1.4 小结
- 第2章垃圾回收
- 2.1 基本运作方式
- 2.2 配置参数
- 2.2.1 工作站模式还是服务器模式
- 2.2.2 后台垃圾回收
- 2.2.3 低延迟模式(Low Latency Mode)
- 2.3 减少内存分配量
- 2.4 首要规则
- 2.5 缩短对象的生存期
- 2.6 减少对象树的深度
- 2.7 减少对象间的引用
- 2.8 避免对象固定
- 2.9 避免使用终结方法
- 2.10 避免分配大对象
- 2.11 避免缓冲区复制
- 2.12 对长期存活对象和大型对象进行池化
- 2.13 减少LOH的碎片整理
- 2.14 某些场合可以强制执行完全回收
- 2.15 必要时对LOH进行碎片整理
- 2.16 在垃圾回收之前获得通知
- 2.17 用弱引用作为缓存
- 2.18 评估和研究垃圾回收性能
- 2.18.1 性能计数器
- 2.18.2 ETW事件
- 2.18.3 垃圾回收的耗时
- 2.18.4 内存分配的发生时机
- 2.18.5 查看已在LOH中分配内存的对象
- 2.18.6 查看内存堆中的全部对象
- 2.18.7 为什么对象没有被回收
- 2.18.8 哪些对象被固定着
- 2.18.9 内存碎片的产生时机
- 2.18.10 对象位于第几代内存堆中
- 2.18.11 第0代内存堆中存活着哪些对象
- 2.18.12 谁在显式调用GC.Collect方法
- 2.18.13 进程中存在哪些弱引用
- 2.19 小结
- 第3章JIT编译
- 3.1 JIT编译的好处
- 3.2 JIT编译的开销
- 3.3 JIT编译器优化
- 3.4 减少JIT编译时间和程序启动时间
- 3.5 利用Profile优化JIT编译
- 3.6 使用NGEN的时机
- 3.6.1 NGEN本机映像的优化
- 3.6.2 本机代码生成
- 3.7 JIT无法胜任的场合
- 3.8 评估
- 3.8.1 性能计数器
- 3.8.2 ETW事件
- 3.8.3 找出JIT耗时最长的方法和模块
- 3.9 小结
- 第4章异步编程
- 4.1 使用Task
- 4.2 并行循环
- 4.3 避免阻塞
- 4.4 在非阻塞式I/O中使用Task
- 4.4.1 适应Task的异步编程模式
- 4.4.2 使用高效I/O
- 4.5 async和await
- 4.6 编程结构上的注意事项
- 4.7 正确使用Timer对象
- 4.8 合理设置线程池的初始大小
- 4.9 不要中止线程
- 4.10 不要改变线程的优先级
- 4.11 线程同步和锁
- 4.11.1 真的需要操心性能吗
- 4.11.2 我真的需要用到同步锁吗
- 4.11.3 多种同步机制的选择
- 4.11.4 内存模型
- 4.11.5 必要时使用volatile
- 4.11.6 使用Interlocked方法
- 4.11.7 使用Monitor(锁)
- 4.11.8 该在什么对象上加锁
- 4.11.9 异步锁
- 4.11.10 其他加锁机制
- 4.11.11 可并发访问的集合类
- 4.11.12 使用更大范围的锁
- 4.11.13 替换整个集合
- 4.11.14 将资源复制给每个线程
- 4.12 评估
- 4.12.1 性能计数器
- 4.12.2 ETW事件
- 4.12.3 查找争用情况最严重的锁
- 4.12.4 查找线程在I/O的阻塞位置
- 4.12.5 利用Visual Studio可视化展示Task和线程
- 4.13 小结
- 第5章编码和类设计的一般规则
- 5.1 类和“结构”的对比
- 5.2 重写“结构”的Equals和GetHashCode方法
- 5.3 虚方法和密封类
- 5.4 接口的分发(Dispatch)
- 5.5 避免装箱
- 5.6 for和foreach的对比
- 5.7 强制类型转换
- 5.8 P/Invoke
- 5.9 委托
- 5.10 异常
- 5.11 dynamic
- 5.12 自行生成代码
- 5.13 预处理
- 5.14 评估
- 5.14.1 ETW事件
- 5.14.2 查找装箱指令
- 5.14.3 第一时间发现“异常”
- 5.15 小结
- 第6章使用.NET Framework
- 6.1 全面了解所用API
- 6.2 多个API殊途同归
- 6.3 集合类
- 6.3.1 泛型集合类
- 6.3.2 可并发访问的集合类
- 6.3.3 其他集合类
- 6.3.4 创建自定义集合类型
- 6.4 字符串
- 6.4.1 字符串比较
- 6.4.2 ToLower和ToUpper
- 6.4.3 字符串拼接
- 6.4.4 字符串格式化
- 6.4.5 ToString国
- 6.4.6 避免字符串解析
- 6.5 应避免使用正常情况下也会抛出“异常”的API
- 6.6 避免使用会在LOH分配内存的API
- 6.7 使用延迟初始化
- 6.8 枚举的惊人开销
- 6.9 对时间的跟踪记录
- 6.10 正则表达式
- 6.11 LINQ
- 6.12 读取文件
- 6.13 优化HTTP参数及网络通信
- 6.14 反射
- 6.15 评估
- 6.16 性能计数器
- 6.17 小结
- 第7章性能计数器
- 7.1 使用已有的计数器
- 7.2 创建自定义计数器
- 7.2.1 Averages国
- 7.2.2 Instantaneous国
- 7.2.3 Deltas国
- 7.2.4 Percentages国
- 7.3 小结
- 第8章ETW事件
- 8.1 定义事件
- 8.2 在PerfView中使用自定义事件
- 8.3 创建自定义ETW事件Listener
- 8.4 获取EventSource的详细信息
- 8.5 自定义PerfView分析插件
- 8.6 小结
- 第9章Windows Phone
- 9.1 评估工具
- 9.2 垃圾回收和内存
- 9.3 JIT
- 9.4 异步编程和内存模式
- 9.5 其他问题
- 9.6 小结
- 第10章代码安全性
- 10.1 充分理解底层的操作系统、API和硬件
- 10.2 把API调用限制在一定范围的代码内
- 10.3 把性能要求很高、难度很大的代码集中起来并加以抽象
- 10.4 把非托管代码和不安全代码隔离出来
- 10.5 除非有证据证明,不然代码清晰度比性能更重要
- 10.6 小结
- 第11章建立追求性能的开发团队
- 11.1 了解最影响性能的关键区域
- 11.2 有效的测试
- 11.3 性能测试平台和自动化
- 11.4 只认数据
- 11.5 有效的代码复查
- 11.6 训练
- 11.7 小结
- 附录A尽快启动对应用程序的性能讨论
- 定义指标
- 分析CPU占用情况
- 分析内存占用情况
- 分析JIT
- 分析异步执行性能
- 附录B大O表示法
- 常见算法及其复杂度
- 排序算法
- 图论算法
- 查找算法
- 特殊案例
- 附录C参考文献
- 参考书籍
- 相关人士及博客
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。