vld*_*jcc 1 c# t-sql sql-server
我有一个C#程序,必须处理大约10万个项目,并且ADO.NET访问sql server数据库,在程序的一部分我必须做出性能决定:
Durring处理,对于每个项目,我必须从数据库中读取数据:
我应该为每个项目查询一次数据库,还是应该在开头查询所有项目一次,并在内存中的c#对象中保留100 000行数据(大约10列 - int和string)并从中检索所需数据?
如果你有一个合理的静态数据集,并且有足够的内存来预先读取所有内容,并保持结果缓存而不会使系统的其他部分缺乏内存,那么答案很简单:你应该这样做.
任何数据库操作的成本都有两个主要组成部分 - 数据传输的成本和往返的成本.在您的情况下,数据传输的成本是固定的,因为总的字节数不会根据您是一次全部检索它们还是一次获取一个块而改变.
往返的成本包括RDBMS从SQL语句中找出所需数据所需的时间,查找数据,并执行所需的所有锁定以确保为您提供的数据是一致的.单次往返并不昂贵,但当你做了10万次时,成本可能会变得过高.这就是为什么最好在内存配置允许的情况下立即读取数据.
另一个问题是您的数据有多动态.如果您在处理整个集合所花费的时间内数据发生变化的可能性很高,那么您可以采取其他预防措施,以确定在计算完成后是否需要重新处理任何内容.