string-Concat
public static String Concat(params Object[] args) { if (args==null) { throw new ArgumentNullException("args"); } Contract.Ensures(Contract.Result<String>() != null); Contract.EndContractBlock(); String[] sArgs = new String[args.Length]; int totalLength=0; for (int i=0; i<args.Length; i++) { object value = args[i]; sArgs[i] = ((value==null)?(String.Empty):(value.ToString())); if (sArgs[i] == null) sArgs[i] = String.Empty; // value.ToString() above could have returned null totalLength += sArgs[i].Length; // check for overflow if (totalLength < 0) { throw new OutOfMemoryException(); } } return ConcatArray(sArgs, totalLength); }
[System.Security.SecuritySafeCritical] // auto-generated private static String ConcatArray(String[] values, int totalLength) { String result = FastAllocateString(totalLength); int currPos=0; for (int i=0; i<values.Length; i++) { Contract.Assert((currPos <= totalLength - values[i].Length), "[String.ConcatArray](currPos <= totalLength - values[i].Length)"); FillStringChecked(result, currPos, values[i]); currPos+=values[i].Length; } return result; }
1>固定数量的字符串连接+的效率是最高的;
2>当字符串的数量不固定,并且子串的长度小于8,用StringBuiler的效率高些。
3>当字符串的数量不固定,并且子串的长度大于8,用List<string>的效率高些。