E发宝典《ET性能优化》

本书详细解释了影响应用程序性能的Windows、CLR和物理硬件的内部结构,并为读者提供了衡量代码如何独立于外部因素执行操作的知识和工具。书中提供了大量的C#代码示例和技巧,将帮助读者zui大限度地提高算法和应用程序的性能,提高个人竞争优势,使用更低的成本获取更多的用户。本书共11章,D1章和D2章关注性能的度量指标及性能评测;第3章和第4章则深入CLR内部,专注于类型与CLR垃圾回收的内部实现;第5~8章及D11章讨论.NET框架中的几个特定的方面,以及CLR提供的几种可用来进行性能优化的手段;第9章对复杂度理论和算法进行了简单的尝试;D10章则包含了一些独立话题,包括启动时间优化、异常及.NET反射等。本书适合已经拥有一定C#语言和.NET框架的编程基础,对相关概念较为熟悉的中gao级程序员阅读学习。

作者简介

SashaGoldshtein是微软公司VisualC#方向的MVP,也是SELAGroup的首席技术官(CTO)。Sasha领导了SELA技术中心的性能与排错团队,并且在多个领域提供咨询服务,包括生产环境调试、应用程序性能排错及分布式架构。Sasha的经验主要集中在C#与C应用程序开发,以及高可伸缩性和高性能系统架构等方面。他经常在微软公司的相关会议上发表演讲,并举办了如“.NET性能”“.NET调试”“深入Windows”等多项培训课程。

DimaZurbalev是SELAGroup性能与调试团队紧急响应组的高级咨询师。Dima在性能优化和排错上帮助客户完成了许多几乎不可能完成的任务,引导他们深入理解CLR及Windows的内部细节。他的大部分开发经验围绕.NET与C基础项目进行,同时,他也在为CodePlex上的多个项目贡献代码。IdoFlatow是微软公司Connected系统方向的MVP,也是SELA团队的高级架构师。他拥有超过15年的行业经验,目前是SELA的WindowsAzure及Web领域的专家之一,专长为WCF、ASP.NET、Silverlight及IIS等技术。他是一名微软认证培训师(MicrosoftCertifiedTrainer,MCT),也是微软官方WCF4.0课程(10263A)的合作者。他同样也经常在微软公司的相关会议上发表演讲。

-----------------

目录

第1章 性能指标1

1.1性能目标1

1.2性能指标3

1.3小结4

第2章 性能度量5

2.1性能度量方式5

2.2Windows内置工具5

2.2.1性能计数器6

2.2.2Windows事件追踪10

2.3时间分析器20

2.3.1VisualStudio采样分析器20

2.3.2VisualStudio检测分析器24

2.3.3时间分析器的gao级用法25

2.4内存分配分析器27

2.4.1VisualStudio内存分配

分析器27

2.4.2CLR分析器29

2.5内存分析器34

2.5.1ANTSMemoryProfiler34

2.5.2SciTech.NETMemory

Profiler36

2.6其他分析器38

2.6.1数据库和数据访问

分析工具38

2.6.2并发分析工具38

2.6.3I/O分析工具40

2.7微基准测试41

2.7.1设计不佳的微基准测试

示例41

2.7.2微基准测试指南44

2.8小结45

第3章 类型揭秘47

3.1示例47

3.2引用类型和值类型在语义上的

区别48

3.3存储、分配和销毁48

3.4引用类型揭秘50

3.4.1方法表51

3.4.2调用引用类型实例的方法55

3.4.3非虚方法的分发56

3.4.4静态方法和接口方法的

分发58

3.4.5同步块索引和lock

关键字59

3.5值类型揭秘63

3.6值类型的虚方法65

3.7装箱65

3.7.1避免在调用值类型的Equals

方法时产生装箱67

3.7.2GetHashCode方法70

3.8使用值类型的zui佳实践72

3.9小结72

第4章 垃圾回收73

4.1为什么需要垃圾回收73

4.1.1空闲列表管理73

4.1.2引用计数垃圾回收74

4.2追踪垃圾回收75

4.2.1标记阶段76

4.2.2清理与压缩阶段80

4.2.3固定82

4.3垃圾回收器的特征83

4.3.1垃圾回收时暂停线程83

4.3.2在垃圾回收时挂起线程83

4.3.3工作站垃圾回收85

4.3.4服务器垃圾回收86

4.3.5切换垃圾回收特征87

4.4代89

4.4.1“代”模型的假设89

4.4.2.NET中“代”的实现90

4.4.3大对象堆93

4.4.4跨代引用94

4.4.5后台垃圾回收96

4.5垃圾回收段和虚拟内存97

4.6终结化100

4.6.1手动确定性终结化100

4.6.2自动的非确定性终结化100

4.6.3非确定性终结的缺点102

4.6.4Dispose模式104

4.7弱引用106

4.8使用垃圾回收器108

4.8.1System.GC类108

4.8.2使用CLR宿主与垃圾

回收器进行交互111

4.8.3垃圾回收触发器111

4.9垃圾回收性能zui佳实践112

4.9.1“代”模型112

4.9.2固定113

4.9.3终结化114

4.9.4其他建议与zui佳实践114

4.10小结117

第5章 集合和泛型119

5.1泛型119

5.1.1.NET泛型121

5.1.2泛型约束122

5.1.3CLR泛型的实现125

5.2集合131

5.2.1并发集合132

5.2.2缓存133

5.3自定义集合137

5.3.1分离集(并查集)137

5.3.2跳跃表138

5.3.3一次性集合139

5.4小结141

第6章 并发和并行142

6.1挑战与所得142

6.2从线程到线程池,再到任务143

6.2.1任务并行148

6.2.2数据并行153

6.2.3C#5异步方法156

6.2.4TPL中的gao级模式159

6.3同步160

6.3.1无锁代码161

6.3.2Windows同步机制165

6.3.3缓存167

6.4通用的GPU计算168

6.4.1CAMP简介169

6.4.2矩阵相乘171

6.4.3多体仿真171

6.4.4tile和共享内存172

6.5小结175

第7章 网络、I/O和序列化176

7.1I/O基本概念176

7.1.1同步与异步I/O176

7.1.2I/O完成端口177

7.1.3.NET线程池181

7.1.4内存复制181

7.2分散-聚集I/O182

7.3文件I/O182

7.3.1缓存提示183

7.3.2非缓存I/O183

7.4网络I/O184

7.4.1网络协议184

7.4.2网络套接字185

7.5数据序列化与反序列化186

7.5.1序列化基准测试187

7.5.2数据集(DataSet)

序列化189

7.6Windows通信基础类库189

7.6.1限流189

7.6.2处理模型190

7.6.3缓存191

7.6.4异步WCF客户端与

服务器191

7.6.5绑定192

7.7小结193

第8章 不安全的代码以及互操作194

8.1不安全的代码194

8.1.1对象固定与垃圾回收

句柄195

8.1.2生存期管理196

8.1.3分配非托管内存196

8.1.4内存池197

8.2平台调用198

8.2.1PInvoke.net与P/Invoke

InteropAssistant软件199

8.2.2绑定200

8.2.3列集器存根程序201

8.2.4原生同构类型204

8.2.5列集方向、值类型和引用

类型的列集205

8.2.6代码访问安全性206

8.3COM互操作性206

8.3.1生存期管理207

8.3.2单元列集208

8.3.3TLB导入与代码访问

安全性209

8.3.4无主互操作程序集

(NoPIA)209

8.3.5异常210

8.4C/CLI语言扩展211

8.4.1marshal_as辅助库213

8.4.2IL代码与原生代码214

8.5Windows8WinRT互操作214

8.6互操作的zui佳实践215

8.7小结215

第9章 算法优化216

9.1复杂度的维度216

9.1.1大O复杂度216

9.1.2主定理217

9.1.3图灵机与复杂度分类218

9.1.4停机问题219

9.1.5NP完全问题221

9.1.6记忆与动态规划221

9.1.7编辑距离222

9.1.8每对顶点间的zui短路径224

9.2近似算法226

9.2.1旅行商问题226

9.2.2zui大割227

9.3概率算法227

9.3.1概率zui大割227

9.3.2费马质数测试228

9.4索引与压缩228

9.4.1变量的长度编码228

9.4.2压缩索引229

9.5小结230

第10章 性能模式232

10.1JIT编译器优化232

10.1.1标准的优化方法232

10.1.2方法内联233

10.1.3消除边界检查234

10.1.4尾调用236

10.1.5启动性能238

10.1.6使用NGen进行JIT预

编译239

10.1.7多核后台JIT编译241

10.2关于启动性能的其他技巧243

10.2.1将强命名程序集置于

GAC中243

10.2.2防止本机镜像发生地址

重排243

10.2.3减少程序集数目244

10.3处理器相关的优化245

10.3.1单指令多数据流

(SIMD)245

10.3.2指令级别并行247

10.4异常250

10.5反射250

10.6代码生成251

10.6.1直接用源代码生成

代码251

10.6.2用动态轻量级代码生成技

术(LCG)生成代码253

10.7小结257

第11章 Web应用性能258

11.1测试Web应用的性能258

11.1.1VisualStudioWeb性能

测试和压力测试259

11.1.2HTTP监控工具260

11.1.3分析工具260

11.2提高Web服务器的性能261

11.2.1缓存公用对象261

11.2.2使用异步页面、模块和

控制器262

11.2.3创建异步页面263

11.2.4创建异步控制器265

11.3ASP.NET环境调优265

11.3.1关闭ASP.NET跟踪和调试266

11.3.2关闭视图状态267

11.3.3服务端输出缓存268

11.3.4对ASP.NET应用程序进行预编译269

11.3.5ASP.NET进程模型调优270

11.4配置IIS271

11.4.1输出缓存271

11.4.2应用程序池配置273

11.5网络优化274

11.5.1使用HTTP缓存头274

11.5.2启用IIS压缩277

11.5.3精简与合并279

11.5.4使用内容发布网络(CDN)280

11.6对ASP.NET应用程序进行扩容(scaling)281

11.6.1向外扩容281

11.6.2ASP.NET扩容机制282

11.6.3向外扩容的隐患282

11.7小结283

#现在前往

精选留言

宝典,ET性能优化
sample
2020-08-18
写留言
签到
投稿
QQ咨询
返回顶部