c# - foreach 循环非常慢

标签 c# .net ado.net

我正在处理现有的应用程序。此应用程序从一个巨大的文件中读取数据,然后在进行一些计算后,将数据存储在另一个表中。

但是执行此操作的循环(见下文)需要很长时间。由于文件有时包含 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 中提取整组数据并通过数据集处理数据?

编辑:决定进一步解释我的意思.. 您可以执行以下操作,伪代码如下

  1. 使用 select * 并从数据库中获取所有信息并将它们存储到类的列表字典中。
  2. 执行 foreach(在 someReport 中记录 someRecord)并照常进行条件匹配。

关于c# - foreach 循环非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202137/

相关文章:

c# - 如何在 XAML 中动态绑定(bind)图像?

c# - 带有滚动背景图像的 ListView

C# 泛型 - 模仿 C++ 模板特化

android - 如何创建多平台本地化解决方案?

c# - 构建/运行针对已安装 .Net 4 或 .Net 4.5 的 .Net 4 的应用程序之间有什么区别吗?

c# - 创建通用检索方法以返回 1 条记录

c# - C# 中的静态列表分配是原子的

c# - 如何在当前用户下启动进程?

c# - 将大量数据从 txt、csv 文件插入到具有少量无效行的 SQL Server 表中

vb.net - .NET - 有没有办法以编程方式填充强类型数据集中的所有表?