コード内のコードセクションを抽出して、複数のスレッドで実行することはできますか?マルチスレッド、DataReaders&一括挿入...このアプリケーションをマルチスレッド化できますか?
ネットワーク上で私たちのSQLサーバーへのDBのFoxProからのデータの上にアプリをコピー(ファイルは非常に巨大であるので、一括コピーが単位で発生する必要があります...
それは動作しますが、私が欲しいです速度を少しアップバンプする。
1)のいずれかによって、私は複数のスレッドで実行され、または代替としてマークされたセクション、
2)のDataRowの各列を介していないループを有する
私は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())ループ認識していなかった第二の選択肢
のために行ってきました以下。大幅アプリはこれはあなたが後にしている答えではないかもしれないが、あなただけの1のtry文で、最初のリリースモードでコンソールアプリケーションを実行し、インデックスを使用してみましたが
while (reader.Read())
{
object[] obj = tblRow.ItemArray;
reader.GetValues(obj);
tblRow.ItemArray = obj;
tbl.LoadDataRow(tblRow.ItemArray, true);
}
のようなものにforeachループを変換することができ、私はdefの注目点として、すべてのご提案をしてみてくださいよ、だろうあなたはC#からテーブルのロッキングタイプを変更する方法についてのコードサンプルを提供することができます。文字通り最初に私が今聞いたことは、ビットスペース時代です:p(私はgoogleよく) –