第1章 性能的概念 1
1.1 性能如此重要的原因 1
1.1.1 从最终用户的角度看待性能 1
1.1.2 经济状况 1
1.1.3 增长的能力 3
1.2 性能的含义 3
1.3 性能和可伸缩性 4
1.3.1 扩展站点 4
1.3.2 具体环境的性能 9
1.4 性能即过程 12
1.5 小结 16
第2章 ASP.NET中的性能 17
2.1 .NET语言 17
2.2 ASP.NET页面 22
2.2.1 页面事件 23
2.2.2 ASP.NET页面的视图状态 29
2.2.3 页面回送 34
2.2.4 页面智能导航 36
2.2.5 页面异常处理 37
2.3 ASP.NET状态管理 38
2.3.1 ASP.NET会话状态 39
2.3.2 ASP.NET应用程序状态 42
2.3.3 ASP.NET缓存 44
2.3.4 会话、应用程序和缓存状态性能 45
2.3.5 应用程序事件 55
2.4 ASP.NET的安全性 56
2.5 ASP.NET服务器控件 60
2.5.1 ASP.NET的默认控件 60
2.5.2 用户控件 71
2.5.3 自定义控件 74
2.6 ASP.NET @Page指令属性 75
2.7 小结 77
第3章 性能设计 79
3.1 确定用户的期望 79
3.1.1 感觉到的性能 80
3.1.2 动态内容和静态内容的比较 84
3.2 移向OO 86
3.2.1 设计性能良好的可伸缩对象 86
3.2.2 把UI和代码分开 90
3.3 良好用户界面的基本要素 92
3.4 集成外部系统 98
3.5 小结 118
4.1 .NET Framework的性能 119
第4章 性能开发 119
4.1.1 JIT编译器 120
4.1.2 垃圾收集器 120
4.2 用较少的代码完成相同的工作 121
4.2.1 使用IsPostBack 121
4.2.2 懒惰求值 122
4.2.3 减少运行时的工作 124
4.3 有效使用内存 129
4.3.1 锯齿数组 129
4.3.2 弱引用 131
4.4 缓存 133
4.4.1 缓存应用程序数据 133
4.4.2 页面缓存 135
4.4.3 部分页面缓存 137
4.5 使用集合 139
4.6 使用ILDASM 143
4.7 Interop 145
4.7.1 运行时可调用包装器 145
4.7.2 COM单元 146
4.8 小结 146
第5章 数据性能的开发 148
5.1 数据读取器和DataSet 148
5.1.1 数据读取器 148
5.1.2 DataSet 152
5.1.3 在DataSet和数据读取器之间的选择 155
5.2 有效的查询 156
5.2.1 ExecuteScalar和ExecuteNonQuery 156
5.2.2 带参数的查询 157
5.2.3 避免往返 158
5.2.4 自动生成的命令 159
5.3 数据库性能 161
5.3.1 使用存储过程 161
5.3.2 索引 163
5.4 数据库提供者和连接 166
5.4.1 数据库访问提供者 166
5.4.2 连接池 167
5.5 数据绑定的优化 168
5.6 文本操作 172
5.7 性能和XML 174
5.8 小结 175
第6章 使用Web应用程序压力测试工具 177
6.1 WAS工具的概念 177
6.2 WAS工具的简介 178
6.3 创建脚本 179
6.4 脚本的设置 182
6.5 运行脚本 184
6.6 脚本创建方法 191
6.6.1 从内容树创建脚本 191
6.6.2 从日志文件创建脚本 192
6.6.3 手动创建和编辑脚本 193
6.7 其他选项 194
6.7.1 Page Groups 194
6.7.2 Users 194
6.7.3 Clients 196
6.7.4 Cookies 197
6.7.5 Page Properties 197
6.8 安全性 201
7.1 比较ACT和WAS 203
第7章 使用Microsoft ACT 203
7.2 用户界面 205
7.3.1 在Visual Studio .NET中创建一个ACT项目 207
7.3.2 用浏览器记录一个ACT测试 207
7.3 用ACT测试一个.NET Web应用程序 207
7.3.3 改变用户 208
7.3.4 ASP.NET视图状态 209
7.3.5 运行RegisterUsers测试 210
6.9 小结 210
7.4 测试用SOAP启动的Web服务 211
7.5 测试属性 216
7.5.1 General测试属性 216
7.5.2 Usersi测试属性 217
7.5.3 Counters测试属性 218
7.6.1 Test Server Options 220
7.6 项目属性 220
7.6.2 Proxy Settings 221
7.6.3 Socket Settings 221
7.6.4 Enable Logging of Test Runs 221
7.7 处理延迟 222
7.8 使用查询字符串数据 223
7.9 使用cookie和其他消息头数据 224
7.10 身份验证和加密 226
7.11 测试的调试 227
7.12 理解结果 228
7.13 常见的ACT问题 232
7.14 小结 234
8.1 寻找优化区域 235
第8章 性能调整 235
8.1.1 瓶颈的识别 236
8.1.2 设置调整的优先级 236
8.2 处理控件 238
8.2.1 修剪控件树 238
8.2.2 AutoEventWireUp 239
8.2.3 控件的重复填充 240
8.2.4 数据检索 241
8.2.5 数据验证 242
8.3 数据库的调整 242
8.3.1 存储过程 242
8.3.2 建立索引 245
8.3.3 数据类型 247
8.3.4 归档 248
8.3.5 原子操作与批操作 248
8.3.6 事务(保持最少) 249
8.3.7 触发器 250
8.3.8 游标 250
8.3.9 大块调用(chunky call) 250
8.4 XML 252
8.4.1 读取器和文档 252
8.4.2 优化模式的性能 253
8.4.3 查询、更新和其他操作 255
8.4.4 传递 256
8.5 COM Interop 256
8.5.1 调用开销 256
8.5.2 线程模型 257
8.5.3 提高Interop的性能 257
8.6 小结 259
第9章 性能监控 260
9.1 理解性能计数器 261
9.2 默认的ASP.NET性能计数器 263
9.2.1 基于应用程序的性能计数器 264
9.2.2 基于系统的性能计数器 267
9.3 使用性能计数器 268
9.4 自定义的性能计数器 273
9.4.1 System.Diagnostics命名空间 273
9.4.2 安全问题 273
9.4.3 创建性能计数器 275
9.4.4 递增和操作计数器数据 279
9.4.5 删除计数器和类别 286
9.4.6 把自定义的计数器和默认计数器一起使用 287
9.5 在ASP.NET应用程序中使用计数器 289
9.5.1 性能计数器的值 289
9.5.2 创建性能监控器 291
9.6 小结 298
A.1 基于系统的性能计数器 299
A.1.1 Application Restarts 299
A.1.2 Application Running 299
A.1.3 Requests Disconnected 299
A.1.4 Requests Queued 299
A.1.5 Requests Rejected 299
A.1.6 Request Wait Time 299
附录A 性能计数器 299
A.2 基于应用程序的性能计数器 300
A.2.1 Anonymous Requests 300
A.2.2 Anonymous Request/Sec 300
A.1.9 Worker Process Running 300
A.1.8 Worker Process Restarts 300
A.1.7 State Server Counters 300
A.2.3 Cache Total Entries 301
A.2.4 Cache Total Hits 301
A.2.5 Cache Total Misses 301
A.2.6 Cache Total Hit Ratio 301
A.2.7 Cache Total Turnover Rate 301
A.2.8 Cache API Entries 301
A.2.9 Cache API Hits 301
A.2.10 Cache API Misses 301
A.2.11 Cache API Hit Ratio 301
A.2.12 Cache API Turnover Rate 301
A.2.13 Compilations Total 301
A.2.21 Errors Total/Sec 302
A.2.22 Output Cache Entries 302
A.2.20 Errors Total 302
A.2.23 Output Cache Hits 302
A.2.24 Output Cache Misses 302
A.2.17 Errors During Execution 302
A.2.18 Errors Unhandled during Execution 302
A.2.16 Errors During Compilation 302
A.2.15 Errors During Preprocessing 302
A.2.14 Debugging Requests 302
A.2.19 Errors Unhandled During Execution/Sec 302
A.2.31 Requests Failed 303
A.2.36 Requests Total 303
A.2.35 Requests Timed Out 303
A.2.34 Requests Succeeded 303
A.2.32 Requests Not Found 303
A.2.33 Requests Not Authorized 303
A.2.30 Request Executing 303
A.2.29 Request Bytes out Total 303
A.2.28 Request Bytes in Total 303
A.2.27 Pipeline Instance Count 303
A.2.26 Output Cache Turnover Rate 303
A.2.25 Output Cache Hit Ratio 303
A.2.37 Requests/Sec 304
A.2.38 Sessions Active 304
A.2.39 Sessions Abandoned 304
A.2.40 Sessions Timed Out 304
A.2.41 Sessions Total 304
A.2.42 Transactions Aborted 304
A.2.43 Transactions Committed 304
A.2.44 Transactions Pending 304
A.2.45 Transactions Total 304
A.2.46 Transactions/Sec 304