निराधार मान्यताओं के आधार पर संभावित समाधान से इंकार न करें। मैंने अभी एक System.Data.DataTable
. से 100,000 पंक्तियों के सम्मिलन का परीक्षण किया है एक मानक MySqlDataAdapter#Update()
. का उपयोग करके एक MySQL तालिका में एक Transaction
के अंदर . इसे लगातार चलने में लगभग 30 सेकंड का समय लगा:
using (MySqlTransaction tran = conn.BeginTransaction(System.Data.IsolationLevel.Serializable))
{
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.Transaction = tran;
cmd.CommandText = "SELECT * FROM testtable";
using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
{
da.UpdateBatchSize = 1000;
using (MySqlCommandBuilder cb = new MySqlCommandBuilder(da))
{
da.Update(rawData);
tran.Commit();
}
}
}
}
(मैंने UpdateBatchSize
. के लिए कुछ अलग-अलग मानों की कोशिश की है लेकिन बीता हुआ समय पर उनका कोई खास असर नहीं दिख रहा था।)
इसके विपरीत, निम्न कोड MySqlBulkLoader
का उपयोग कर रहा है चलने में केवल 5 या 6 सेकंड का समय लगा ...
string tempCsvFileSpec = @"C:\Users\Gord\Desktop\dump.csv";
using (StreamWriter writer = new StreamWriter(tempCsvFileSpec))
{
Rfc4180Writer.WriteDataTable(rawData, writer, false);
}
var msbl = new MySqlBulkLoader(conn);
msbl.TableName = "testtable";
msbl.FileName = tempCsvFileSpec;
msbl.FieldTerminator = ",";
msbl.FieldQuotationCharacter = '"';
msbl.Load();
System.IO.File.Delete(tempCsvFileSpec);
... डेटाटेबल से 100,000 पंक्तियों को अस्थायी CSV फ़ाइल में डंप करने का समय (यह ), उस फ़ाइल से बल्क-लोडिंग, और बाद में फ़ाइल को हटाना।