【发布时间】:2018-02-15 02:47:56
【问题描述】:
使用 C# 而不是 SSIS 转储平面文件时,我遇到了效率问题。我所做的只是将大约 100k 行的数据库表 (SqlServer) 转储到文本文件中。使用 SSIS 这需要不到一秒钟,而使用下面的 C# 代码需要一分钟以上,这是不可接受的。我做错了什么?:
while (Reader.Read())
{
foreach (string ColumnName in cols)
{
sb.Append('"' + Reader[ColumnName].ToString() + "\",");
}
//save lines to file
WriteLineToFile(TableDefinition.GetTableName(), sb.ToString());
sb.Clear();
}
注意:sb 变量是 StringBuilder。此代码转储多个表,因此 while 循环上的 Reader.Read()。查询本质上是列表中每个表的select * from tablename
WriteLineToFile 方法:
public static void WriteLineToFile(string TableName, string Text)
{
System.IO.File.AppendAllText(OutputDir + @"\" + TableName + ".dat", Text + "\r\n");
}
【问题讨论】:
-
在某些时候,您一定是在进行低效的操作。我的猜测是你打开和关闭
WriteLineToFile中每一行的文件 -
抱歉忘记包含该函数的代码。编辑原始问题。
-
如果有人对我最终使用的内容感兴趣。我最终使用了 SQL Server 的 BCP 工具。您可以为表转储指定自定义查询
标签: c# sql-server database ssis flat-file