对数据库进行远程请求是在App里最“昂贵”的一种操作方式,越过本地机器和进程进行远程请求,其代价都是相当“昂贵”的,因为这需要消耗掉系统的大量资源。
无论是查询还是写入,对数据库都会进行远程请求。理论上,我们是需要将远程请求的数量减少到最低。如果当Linq to SQL Profiler检测到某一个request对数据库进行了大量的请求时就会发出提示。导致请求过多通常有以下几点原因:
- Select N + 1导致了大量的查询产生
- 对数据库进行了循环的请求模式
- 更新、插入或是删除了大量的字符实体
- 我们执行的任务里含有大量的不同的查询
对于第一个原因和Select N + 1有关,请具体参考上一篇文章。
对数据库进行了循环的请求模式通常来讲就是一个BUG,应该要注意避免。我们可以对代码进行重建以取消对数据库的循环请求。
最后两个原因则需要individual basis来解决。有的时候使用另外一种不一样的方法比如批量插入、批量拷贝,或者具体的查询、存储程序等一次性的从数据库里获得所有数据。