Можно ли извлечь фрагмент кода внутри моего кода и запустить его в несколько потоков?
Приложение копирует данные из базы данных FoxPro на наш сервер SQL по сети (файлы довольно большие, поэтому массовое копирование должно выполняться с приращением ...
Это работает, но я бы хотел немного увеличить скорость.
1) При наличии помеченного мной раздела, работающего в нескольких потоках, ИЛИ в качестве альтернативы,
2) не проходить через каждый столбец в датарове,
Я выбрал второй вариант ... (обновленный код ниже)
КОД
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
Я пошел за вторым вариантом
Я не знал, что, находясь внутри цикла while (reader.Read ()), я могу сделать следующее. Мне не помогли значительно повысить производительность приложений
while (reader.Read())
{
object[] obj = tblRow.ItemArray;
reader.GetValues(obj);
tblRow.ItemArray = obj;
tbl.LoadDataRow(tblRow.ItemArray, true);
}