数据访问性能优化全解析
1. 查询计划缓存
- 启用与禁用 :
ObjectQuery.EnablePlanCaching
用于启用或禁用ObjectQuery
查询的查询计划缓存。对于EntityClient
,可以将布尔型的EntityCommand.EnablePlanCaching
设置为true
或false
来启用或禁用缓存。 - 动态查询的建议 :如果动态构建实体 SQL 表达式,微软建议禁用查询计划缓存以避免 SQL 注入攻击。不过,最好的防御方法是避免构建动态查询。
- 大小写敏感性 :存储的查询是区分大小写的。例如,在一个方法中输入 “select value c …”,在另一个方法中输入 “SELECT VALUE c …”,它们不会被视为匹配的查询,这不仅会失去缓存查询的优势,还会因存储额外的查询而增加缓存大小。
- 性能测试对比 :
| 查询计划缓存状态 | 启用 | 禁用 |
| — | — | — |
| 实体 SQL 与对象服务 | 1.1 ms | 3.23 ms |
| 实体 SQL 与 EntityClient | 4.1 ms | 6.38 ms |
从上述表格可以看出,启用缓存时查询时间明显少于未启用