是否有可能提取我的代码中的代码部分,并让它在多个线程中运行?多线程,DataReaders和批量插入...这个应用程序可以多线程?
该应用程序在复制数据从一个FoxPro数据库到我们的SQL服务器通过网络(文件是相当巨大的,因此批量复制需要增量发生......
它的工作原理,但我想颠簸起来的速度的比特。
1)通过任一具有I标记在多个线程中运行,或者作为替代的部分中,
2)通过在数据行的每一列不循环,
我去了第二个选项...(更新下面的代码)
CODE
private void BulkCopy(OleDbDataReader reader, string tableName, Table table)
{
if (Convert.ToBoolean(ConfigurationManager.AppSettings["CopyData"]))
{
Console.WriteLine(tableName + " BulkCopy Started.");
try
{
DataTable tbl = new DataTable();
foreach (Column col in table.Columns)
{
tbl.Columns.Add(col.Name, ConvertDataTypeToType(col.DataType));
}
int batch = 1;
int counter = 0;
DataRow tblRow = tbl.NewRow();
while (reader.Read())
{
counter++;
////This section changed
object[] obj = tblRow.ItemArray;
reader.GetValues(obj);
tblRow.ItemArray = obj;
////**********
tbl.LoadDataRow(tblRow.ItemArray, true);
if (counter == BulkInsertIncrement)
{
Console.WriteLine(tableName + " :: Batch >> " + batch);
counter = PerformInsert(tableName, tbl, batch);
batch++;
}
}
if (counter > 0)
{
Console.WriteLine(tableName + " :: Batch >> " + batch);
PerformInsert(tableName, tbl, counter);
}
tbl = null;
Console.WriteLine("BulkCopy Success!");
}
catch (Exception)
{
Console.WriteLine("BulkCopy Fail!");
}
finally
{
reader.Close();
reader.Dispose();
}
Console.WriteLine(tableName + " BulkCopy Ended.");
}
}
UPDATE 我去了第二个选项
我不知道,而同时内部(reader.Read())循环,我可以做下列。 I'T有助于大大提高应用程序的性能
while (reader.Read())
{
object[] obj = tblRow.ItemArray;
reader.GetValues(obj);
tblRow.ItemArray = obj;
tbl.LoadDataRow(tblRow.ItemArray, true);
}
我会尝试高清所有的建议,为兴趣点,将你可以提供一个代码示例,了解如何更改表锁定类型,从c#..我现在是第一次听说它,所以似乎有点太空时代:p(我会咨询谷歌作为好吧) – 2012-02-03 10:23:18