Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is a FileWriter with StringBuilder buffer. It uses a separate thread to write while main thread keeps accumulating data. Writes 10MB buffer at a time. Buffered data is kept in Queue object; writer thread removes item from this Queue and writes it out full using with File.AppendAllText method.</p> <pre><code>private Queue&lt;StringBuilder&gt; writeQueue; private bool isComplete; public void FileWriter() { this.isComplete = false; this.writeQueue = new Queue&lt;StringBuilder&gt;(); var writer = new Action&lt;string&gt;(this.StartWriting); var writerAsync = writer.BeginInvoke(@"outputfile.txt", null, null); using (StreamReader sr = new StreamReader(@"inputfile.txt")) { var fileHeaders = sr.ReadLine() .Split('\t') .Where(i =&gt; !string.IsNullOrEmpty(i)) .Select(j =&gt; j.Trim()) .ToList(); var buffer = new StringBuilder(); while (!sr.EndOfStream) { var originalLine = sr.ReadLine() .Split('\t') .Where(i =&gt; !string.IsNullOrEmpty(i)) .Select(j =&gt; j.Trim()) .ToList(); var line = new StringBuilder(); //Must have same number of items if (originalLine.Count == fileHeaders.Count) { for (int i = 0; i &lt; fileHeaders.Count(); i++) { line.AppendFormat("{0}={1}&amp;", fileHeaders[i], originalLine[i]); } line.AppendLine(); } buffer.AppendLine(line.ToString()); if (buffer.Length &gt; 1024 * 1024 * 10)//approx 10MB { lock (this.writeQueue) { this.writeQueue.Enqueue(buffer); } buffer = new StringBuilder(); } } //Queue any final remaining data if (buffer.Length&gt;0) lock (this.writeQueue) { this.writeQueue.Enqueue(buffer); } } this.isComplete = true; writer.EndInvoke(writerAsync); } private void StartWriting(string outFilePath) { while (!this.isComplete || this.writeQueue.Count &gt; 0) { StringBuilder queuedItem; if (this.writeQueue.Count &gt; 0) { lock (this.writeQueue) { queuedItem = this.writeQueue.Dequeue(); } File.AppendAllText(outFilePath, queuedItem.ToString()); } System.Threading.Thread.Sleep(5000); //Sleep 5sec } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload