Возможно ли извлечь код внутри моего кода и запустить его в нескольких потоках?Многопоточность, DataReaders & Bulk Inserts ... Может ли это приложение быть многопоточным?
В приложение копирует данные из FoxPro DB на наш SQL сервер по сети (файлы являются довольно огромным, поэтому основная копия должна происходить с шагом ...
Это работает, но я хотел бы поднять вверх по скорости бит.
1) либо имеющей секцию я отмеченную работать в нескольких потоках, или в качестве альтернативы,
2), не цикл через каждый столбец в DataRow,
Я пошел на второй вариант ... (Обновленный код ниже)
КОД
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 (я посоветуюсь с google как хорошо) –