Note that there are some explanatory texts on larger screens.

plurals
  1. POThere is no difference between using char[] and StringBuilder and string when concatenating strings
    primarykey
    data
    text
    <p>It is said that <code>char[]</code> performs better that <code>StringBuilder</code> and <code>StringBuilder</code> performs better than <code>string</code> in terms of concatenation.</p> <p>In my test there is no significant difference between using <code>StringBuilder</code> and <code>string</code> inside the loop. In fact the <code>char[]</code> is the slowest.</p> <p>I am testing against the same table with 44 columns and 130,000 rows the query is select * from test</p> <p>Can someone help me see if I did something wrong?</p> <p>The following is the code</p> <pre><code>//fetchByString(rd, fldCnt, delimiter, sw); // duration: 3 seconds //fetchByBuilder(rd, fldCnt, delimiter, sw, rsize); // duration: 3 seconds //fetchByCharArray(rd, fldCnt, delimiter, sw, rsize); // duration: 7 seconds private void fetchByString(OracleDataReader pReader, int pFldCnt, string pDelimiter, StreamWriter pWriter) { while (pReader.Read()) { string[] s = new string[pFldCnt]; for (Int32 j = 0; j &lt; pFldCnt; j++) { if (pReader.IsDBNull(j)) { s[j] = ""; } else { s[j] = pReader.GetValue(j).ToString(); // correct value } } pWriter.WriteLine(string.Join(pDelimiter, s)); } } private void fetchByBuilder(OracleDataReader pReader, int pFldCnt, string pDelimiter, StreamWriter pWriter, int pRowSzie) { StringBuilder sb = new StringBuilder(pRowSzie); while (pReader.Read()) { for (Int32 j = 0; j &lt; pFldCnt; j++) { if (pReader.IsDBNull(j)) { //sb.Append(""); sb.Append(pDelimiter); } else { sb.Append(pReader.GetValue(j).ToString()); // correct value sb.Append(pDelimiter); } } pWriter.WriteLine(sb.ToString()); sb.Clear(); } } private void fetchByCharArray(OracleDataReader pReader, int pFldCnt, string pDelimiter, StreamWriter pWriter, int pRowSzie) { char[] rowArray; int sofar; while (pReader.Read()) { rowArray = new char[pRowSzie]; sofar = 0; for (Int32 j = 0; j &lt; pFldCnt; j++) { if (pReader.IsDBNull(j)) { pDelimiter.CopyTo(0, rowArray, sofar, pDelimiter.Length); sofar += pDelimiter.Length; } else { pReader.GetValue(j).ToString().CopyTo(0, rowArray, sofar, pReader.GetValue(j).ToString().Length); sofar += pReader.GetValue(j).ToString().Length; pDelimiter.CopyTo(0, rowArray, sofar, pDelimiter.Length); sofar += pDelimiter.Length; } } string a = new string(rowArray).TrimEnd('\0'); pWriter.WriteLine(a); } } </code></pre>
    singulars
    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. 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