本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
了解.NET内存管理的内部工作原理、陷阱和技术,以便有效地避免软件中出现各种性能和可伸缩性问题。尽管.NET具有自动内存管理功能,但了解 .NET的内存管理工作原理以及如何□好地编写与之高效交互的软件方面仍有许多益处。《.NET内存管理宝典 提高代码质量、性能和可扩展性》是你通过了解和处理 .NET 中的内存管理来编写出更好软件的全面指南。
《.NET内存管理宝典 提高代码质量、性能和可扩展性》经过了 Microsoft 的 .NET 团队全面审查,包含 了□5 个有价值的故障排除方案,旨在帮助诊断具有挑战性的内存问题。读者还将受益于多个 .NET 内存管理”规则”,这些规则介绍了编写内存感知代码的方法以及避免常见的破坏性陷阱的方法。
本书内容
● 了解自动内存管理的理论基础
● 深入研究.NET内存管理的各个方面,包括对垃圾回收(GC)实现的详细介绍,这些知识如果自行摸索需要多年经验才能获得
● 获得如何将这些知识应用于实际软件开发中的实用建议
● 使用与 .NET 内存管理相关工具的实用知识来诊断各种与内存相关的问题
● 探索高级内存管理的各个方面,包括使用Span和Memory类型
目 录
□□章 基本概念 1
1.1 内存相关术语 □
1.□ 手动内存管理 15
1.3 自动内存管理 19
1.4 引用计数 □3
1.5 跟踪回收器(Tracking Collector ) □6
1.6 小历史 3□
1.7 本章小结 34
规则1 – 自学 34
第□章 底层内存管理 37
□.1 硬件 37
□.□ 操作系统 55
□.3 NUMA和CPU组 70
□.4 本章小结 71
规则□ – 避免随机访问,拥抱循序访问 71
规则3 – 提高空间和时间数据局部性 7□
规则4 – 不要放弃使用更高级技巧的可能性 7□
第3章 内存测量 73
3.1 尽早测量 74
3.□ Windows环境 81
3.3 Linux环境 1□3
3.4 本章小结 135
规则5 – 尽早测量GC 137
第4章 .NET基础知识 139
4.1 .NET版本 139
4.□ .NET内部原理 141
4.3 程序集和应用程序域 148
4.4 进程内存区域 150
4.5 类型系统 161
4.6 字符串 173
4.7 装箱与拆箱 185
4.8 按引用传递 188
4.9 类型数据局部性 190
4.10 静态数据 193
4.11 本章小结 197
规则6 – 测量你的程序 197
规则7 – 不要假设内存泄漏不存在 198
规则8 – 考虑使用结构 198
规则9 – 考虑使用字符串暂存 198
规则10 – 避免装箱 198
第5章 内存分区 □01
5.1 分区策略 □01
5.□ 按大小分区 □0□
5.3 按生存期分区 □07
5.4 按物理分区 □□4
5.5 本章小结 □41
规则11 – 监视代大小 □41
规则1□ – 避免不必要的堆引用 □41
规则13 – 监视段使用情况 □4□
第6章 内存分配 □43
6.1 内存分配简介 □43
6.□ bump pointer分配 □44
6.3 空闲列表分配 □50
6.4 创建新对象 □53
6.5 堆再平衡 □60
6.6 OutOfMemoryException异常 □6□
场景6-1:OutOfMemoryException异常 □63
6.7 堆栈分配 □65
6.8 避免分配 □66
6.9 本章小结 300
规则14 – 在性能攸关的地方,
避免堆分配 300
规则15 – 避免过多的LOH分配 301
规则16 – 如果可行,在堆栈上分配 301
第7章 垃圾回收——简介 303
7.1 高层视图 303
7.□ GC过程的示例 304
7.3 GC过程的步骤 309
场景7-1:分析GC的使用情况 309
7.4 分析GC 313
7.5 垃圾回收性能调优数据 314
7.6 回收触发器 3□5
7.7 EE挂起 334
场景7-4:分析GC挂起时间 335
7.8 要判决的代 336
场景7-5:被判决的代的分析 338
7.9 本章小结 339
第8章 垃圾回收——标记阶段 341
8.1 对象的遍历与标记 341
8.□ 局部变量根 34□
8.3 终结根 357
8.4 GC内部根 357
8.5 GC句柄根 358
8.6 处理内存泄漏 363
第9章 垃圾回收——计划阶段 371
9.1 小对象堆 371
9.□ 大对象堆 389
9.3 压缩的决策 390
9.4 本章小结 391
□□0章 垃圾回收——清除和压缩 393
10.1 清除阶段 393
10.□ 压缩阶段 394
10.3 本章小结 404
规则17 – 观察运行时挂起 405
规则18 – 避免“中年危机” 406
规则19 – 避免老的代和LOH碎片化 406
规则□0 – 避免显式GC 407
规则□1 – 避免内存泄漏 407
规则□□ – 避免固定 407
□□1章 GC风格 409
11.1 模式概述 409
11.□ 模式配置 411
11.3 GC停顿和开销 413
11.4 模式描述 414
11.5 延迟模式 4□6
11.6 选择GC风格 431
11.7 本章小结 438
规则□3 – 有意识地选择GC模式 439
规则□4 – 记住延迟模式的相关知识 439
□□□章 对象生存期 441
1□.1 对象与资源的生命周期 441
1□.□ 终结 44□
1□.3 Disposable对象 463
1□.4 安全句柄 468
1□.5 弱引用 473
1□.6 本章小结 486
规则□5 – 避免终结器 486
规则□6 – □□显式清理 487
□□3章 其他主题 489
13.1 依赖句柄 489
13.□ 线程局部存储 494
13.3 托管指针 504
13.4 关于结构的更多知识 5□6
13.5 对象/结构布局 533
13.6 非托管约束 541
13.7 本章小结 546
□□4章 高级技巧 547
14.1 Span
14.□ Unsafe 568
14.3 面向数据设计 573
14.4 未来特性 585
14.5 本章小结 595
□□5章 编程API 597
15.1 GC API 597
15.□ CLR Hosting 609
15.3 ClrMD 616
15.4 TraceEvent库 6□1
15.5 自定义GC 6□3
15.6 本章小结 6□6
作 者 简 介
Konrad Kokosa是一位经验丰富的软件设计师和开发人员。他对Microsoft公司的技术特别感兴趣,同时对其他所有技术也充满好奇。Konrad从事编程工作已经有十多年,解决过.NET世界中的许多性能问题和架构难题,设计和提升过.NET应用程序的运行速度。他是一名独立顾问,是meetup和技术会议讲师,喜欢写Twitter。Konrad还分享了他作为.NET领域培训讲师的激情岁月,特别是在应用程序性能、编码优秀实践和诊断方面。他是华沙Web性能小组的创始人。他是Visual Studio和开发工具类别中的Microsoft MVP。他是Dotnetos.org的联合创始人。Dotnetos.org由三位.NET爱好者发起,主要组织.NET性能相关的会议。
译 者 简 介
叶伟民
《.NET并发编程实战》的译者。曾在美国旧金山工作,具有16年的.NET开发经验,目前从业于金融科技行业。
涂曙光
前微软技术专家,专注于.NET和JavaScript技术领域。目前在私募基金行业从事低延迟交易系统的开发。