2

我编写了一些工资单处理软件,最终使用SqlDataAdapter.Insert(). (我正在使用创建的默认插入命令SqlCommandBuilder().) 我在 Windows 7 上使用 .NET Framework 4,写入 SQL Server 2008(不是 R2)Std Edition x64 SP3。问题是,我只看到从我的 PC(Dell Optiplex 990 Core i7)到 SQL Server(我的 PC 和服务器上的 NIC 是 GB Enet,但不幸的瓶颈之间有一些 100Mbps 的交换机)的吞吐量约为 2 Mbps,但仍然 - 100Mbps)。我可以将文件从我的 PC 复制到运行 SQL Server 的服务器,并且没有吞吐量问题 - 我可以在那里获得非常接近 100 Mbps 的吞吐量。我将数据库放在另一个运行 2008 R2 的 LAN SQL Server 上,在那里我设法获得了 5 Mbps 的吞吐量,但仍然 - 非常慢。Insert()运行命令时,我的 PC 的 CPU 接近 0 。我试图增加和减少数据包大小参数SqlConnection.ConnectionString财产,但什么也没做。

如果我在我的 PC 上执行SELECT * FROM <table>从 SSMS 到有问题的 SQL Server,我可以获得大约 45 Mbps 的持续吞吐量。

我不确定下一步该去哪里寻找罪魁祸首 - 任何建议表示赞赏。

4

1 回答 1

0

SqlDataAdapter 的 Insert 一次执行一条记录,如果您要插入大量记录,则应该使用SqlBulkCopy来减轻执行这些插入的开销。

using (SqlConnection destinationConnection = new SqlConnection(connectionString))
{
    destinationConnection.Open();
    using (SqlBulkCopy bulkCopy =
               new SqlBulkCopy(destinationConnection))
    {
        bulkCopy.DestinationTableName = destTableName;
        bulkCopy.WriteToServer(sourceDataTable);
    }
}
于 2013-07-30T21:22:15.537 回答