c# - SqlBulkCopy 慢如糖浆

标签 c# sqlbulkcopy

我正在寻找通过 C# 加载批量数据的最快方法。我有这个脚本可以完成这项工作但速度很慢。我读到 SqlBulkCopy 是最快的证词。
1000条记录2.5秒。文件包含近 5000 条记录到 250k 哪些事情可以减慢它的速度?

表定义:

CREATE TABLE [dbo].[tempDispositions](
    [QuotaGroup] [varchar](100) NULL,
    [Country] [varchar](50) NULL,
    [ServiceGroup] [varchar](50) NULL,
    [Language] [varchar](50) NULL,
    [ContactChannel] [varchar](10) NULL,
    [TrackingID] [varchar](20) NULL,
    [CaseClosedDate] [varchar](25) NULL,
    [MSFTRep] [varchar](50) NULL,
    [CustEmail] [varchar](100) NULL,
    [CustPhone] [varchar](100) NULL,
    [CustomerName] [nvarchar](100) NULL,
    [ProductFamily] [varchar](35) NULL,
    [ProductSubType] [varchar](255) NULL,
    [CandidateReceivedDate] [varchar](25) NULL,
    [SurveyMode] [varchar](1) NULL,
    [SurveyWaveStartDate] [varchar](25) NULL,
    [SurveyInvitationDate] [varchar](25) NULL,
    [SurveyReminderDate] [varchar](25) NULL,
    [SurveyCompleteDate] [varchar](25) NULL,
    [OptOutDate] [varchar](25) NULL,
    [SurveyWaveEndDate] [varchar](25) NULL,
    [DispositionCode] [varchar](5) NULL,
    [SurveyName] [varchar](20) NULL,
    [SurveyVendor] [varchar](20) NULL,
    [BusinessUnitName] [varchar](25) NULL,
    [UploadId] [int] NULL,
    [LineNumber] [int] NULL,
    [BusinessUnitSubgroup] [varchar](25) NULL,
    [FileDate] [datetime] NULL
) ON [PRIMARY]

这是代码

    private void BulkLoadContent(DataTable dt)
    {
        OnMessage("Bulk loading records to temp table");
        OnSubMessage("Bulk Load Started");
        using (SqlBulkCopy bcp = new SqlBulkCopy(conn))
        {
            bcp.DestinationTableName = "dbo.tempDispositions";
            bcp.BulkCopyTimeout = 0;
            foreach (DataColumn dc in dt.Columns)
            {
                bcp.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
            }
            bcp.NotifyAfter = 2000;
            bcp.SqlRowsCopied += new SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
            bcp.WriteToServer(dt);
            bcp.Close();
        }
    }

最佳答案

您对该表有任何索引、触发器或约束吗?

这会导致插入速度变慢——尤其是聚集索引会造成伤害。 当爆破你正在做的数据量时,最好先删除索引,然后再重新应用它们。

关于它的一篇好文章在这里: What's the fastest way to bulk insert a lot of data in SQL Server (C# client)

关于c# - SqlBulkCopy 慢如糖浆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2692654/

相关文章:

c# - 计算 CSV 文件中的名称

c# - 装饰器装饰基本命令

c# - 如何 : Parallel. Foreach 执行多个进程,每个进程运行一个新进程(但一次一个)?

sql-server-2005 - SqlBulkInsert - 如何设置火灾触发器,检查约束?

sql-server - 执行批量插入时的 SQL Server 索引行为

c# - 使用 sql CE 的 sqlbulkcopy

c# - 选项卡索引不适用于单选按钮

c# - 编程引用任何人?

c# - 使用 SqlBulkCopy 时提供流作为二进制列的数据源

c# - 即使在为操作设置超时属性后超时异常