Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

सी # विंडोज़ अनुप्रयोगों में .csv फ़ाइल में बड़े डेटाटेबल डेटा निर्यात करें

कॉल करने के बजाय StreamWriter.Write(..) हर समय आप स्ट्रिंगबिल्डर का उपयोग करने . पर विचार कर सकते हैं . सभी स्ट्रिंग्स को Builder में जोड़ें और डिस्क पर केवल एक बार लिखें !

string filePath = @"e:\temp\test.csv";
string delimiter = ",";

#region init DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("a", typeof(string)));
dt.Columns.Add(new DataColumn("b", typeof(string)));
dt.Columns.Add(new DataColumn("c", typeof(string)));
dt.Columns.Add(new DataColumn("d", typeof(string)));
dt.Columns.Add(new DataColumn("e", typeof(string)));
dt.Columns.Add(new DataColumn("f", typeof(string)));
dt.Columns.Add(new DataColumn("g", typeof(string)));
dt.Columns.Add(new DataColumn("h", typeof(string)));
dt.Columns.Add(new DataColumn("i", typeof(string)));
dt.Columns.Add(new DataColumn("j", typeof(string)));
dt.Columns.Add(new DataColumn("k", typeof(string)));
dt.Columns.Add(new DataColumn("l", typeof(string)));
dt.Columns.Add(new DataColumn("m", typeof(string)));
dt.Columns.Add(new DataColumn("n", typeof(string)));
dt.Columns.Add(new DataColumn("o", typeof(string)));
dt.Columns.Add(new DataColumn("p", typeof(string)));

for (int i = 0; i < 100000; i++)
{
    DataRow dr = dt.NewRow();
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        dr[j] = "test" + i + " " + j;
    }
    dt.Rows.Add(dr);
}
#endregion

Stopwatch sw = new Stopwatch();
sw.Start();
StringBuilder sb = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
    sb.AppendLine(string.Join(delimiter, dr.ItemArray));
}
File.WriteAllText(filePath, sb.ToString());
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadLine();

संपादित करें

100000 पंक्तियों ने मुझे 271 एमएस लिया और लगभग 18 एमबी की एक फ़ाइल बनाई

जैसा कि @aiodintsov ने बताया, स्ट्रिंगबिल्डर का उपयोग करने में समस्याएं हो सकती हैं/हो सकती हैं अगर कई MB . हैं आंकड़े का। इसलिए मैंने उनकी टिप्पणी के अनुसार एक उदाहरण बनाया। मेरे लिए ठीक काम किया। निर्यात 2685 एमएस के भीतर 1 000 000 पंक्तियां

Stopwatch sw = new Stopwatch();
sw.Start();
using (StreamWriter swr = 
         new StreamWriter(File.Open(filePath, FileMode.CreateNew), Encoding.Default, 1000000))
         // change buffer size and Encoding to your needs
{
    foreach (DataRow dr in dt.Rows)
    {
        swr.WriteLine(string.Join(delimiter, dr.ItemArray));
    }
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - PHP:तालिका पंक्तियों में परिणाम प्रदर्शित करें (प्रति पंक्ति 5 परिणाम)

  2. पायथन - एसक्यूएल कनेक्टर:अपडेट काम नहीं करता

  3. java.lang.IncompatibleClassChangeError:com.mysql.jdbc.Statement वर्ग मिला, लेकिन इंटरफ़ेस अपेक्षित था

  4. MYSQL:चयन विधि - लेकिन डुप्लीकेट/ग्रुप या DISTINCT न दिखाएं?

  5. MySQL - आंशिक शब्द मिलान और प्रासंगिकता स्कोर के साथ कुशल खोज (FULLTEXT)