我正在处理现有的应用程序。此应用程序从一个巨大的文件中读取数据,然后在进行一些计算后,将数据存储在另一个表中。
但是执行此操作的循环(见下文)需要很长时间。由于文件有时包含 1,000 条记录,因此整个过程需要几天时间。
我可以用其他东西替换这个 foreach
循环吗?我尝试使用 Parallel.ForEach
,它确实有帮助。我是新手,非常感谢您的帮助。
foreach (record someredord Somereport.r)
{
try
{
using (var command = new SqlCommand("[procname]", sqlConn))
{
command.CommandTimeout = 0;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(…);
IAsyncResult result = command.BeginExecuteReader();
while (!result.IsCompleted)
{
System.Threading.Thread.Sleep(10);
}
command.EndExecuteReader(result);
}
}
catch (Exception e)
{
…
}
}
查看答案后,我删除了 Async 并使用编辑代码如下。但这并没有提高性能。
using (command = new SqlCommand("[sp]", sqlConn))
{
command.CommandTimeout = 0;
command.CommandType = CommandType.StoredProcedure;
foreach (record someRecord in someReport.)
{
command.Parameters.Clear();
command.Parameters.Add(....)
command.Prepare();
using (dr = command.ExecuteReader())
{
while (dr.Read())
{
if ()
{
}
else if ()
{
}
}
}
}
}
最佳答案
与其多次循环 sql 连接,不如考虑从 sql server 中提取整组数据并通过数据集处理数据?
编辑:决定进一步解释我的意思.. 您可以执行以下操作,伪代码如下
- 使用 select * 并从数据库中获取所有信息并将它们存储到类的列表或字典中。
- 执行 foreach(在 someReport 中记录 someRecord)并照常进行条件匹配。
关于c# - foreach 循环非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202137/