循环或光标时哪个会表现更好? 经过大量研究后,我发现它们对性能同样不好,有时可能会根据情况相互执行,并且只有在无法使用基于集合的操作时才能使用。
现在的问题是哪个性能更好,在C#中循环或在sql中使用游标(或while循环)? 我在网上搜索,但没有找到明确的结果......
任何人都有任何想法?
答案 0 :(得分:5)
根据我的经验,我会说:这取决于您对每个项目执行的操作......
在一个场景中,我碰巧在SQL中使用游标循环对从DB读取的一些数据执行逐位操作,并且性能非常差(SQL不打算运行这样的东西)。在那种情况下,我在DB上打开的游标上获得了一个更好的循环C#
另一方面,如果你必须为循环的每个项目执行一些其他复杂的数据挖掘任务,那么在SQL中执行它会更方便,这样你的数据就不必返回从DB到C#,反之亦然。
您是否有可以谈论的特定应用场景,以便我们能够对您有所了解?
答案 1 :(得分:0)
当你说“C#中的for循环”时,你的意思是你打算先从查询中加载所有结果,然后再循环它们吗?这种方法的缺点当然是你需要内存来保存所有这些结果。但你不必这样做。 C#中有许多机制允许您在结果进入时循环,这样就无需将所有结果保存在内存中。它当然取决于您的数据库访问技术。
如果您使用基于IQueryable<T>
的某种技术,只需对结果使用foreach
循环,并避免在其上调用实现功能,例如.ToList()
。
对于游标,如果可能,请始终避免使用它们。为了提高性能,始终优先选择基于集合的操作而不是游标。实际上,对于C#中的foreach循环也是如此。如果您对每个结果的处理涉及再次查询数据库,请使用SQL连接,在单个查询中返回所需的数据,而不是检索每个结果行的新查询。