之后fairamountofresearchresearch和一些errors,我修改了我的代码,以便它在每次查询数据库或插入数据时创建一个新的DataContext。并且经常查询数据库 - 对于处理的每个250k事务,在插入事务之前查询数据库以获取客户ID,部门ID和类别。为什么重复使用DataContext会对性能产生负面影响?
所以现在我试图优化代码,因为它每秒只能处理大约15个事务。我删除了一些无关的查询并添加了一些索引,并将其提高到30 /秒。然后我发现即使每个人都说DataContext是轻量级的,但每次事务都需要花费一些时间来创建一个新的,所以我尝试重用DataContext。我惊奇地发现,重用上下文会导致性能每秒降低10个事务!
为什么会这样?是因为DataContext将实体缓存在内存中,并且在查询数据库之前首先搜索其内存列表中的实体?因此,例如,如果我正在寻找名称为“MCS”的客户的客户id(主键),并且客户名称列上有一个聚集索引,以便数据库查询速度很快,则内存查找会更慢?
确实,创建/配置如此之多的数据库连接会降低速度,或者这只是另一个过早的优化?如果它是真的,有没有办法重用一个DataContext,但让它为每个linq-to-sql查询执行实际的数据库查询?