...{
char[] arr = original.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
static string Revease21(string original)
...{
int length = original.Length;
char[] arr = new char[length];
for (int i = 0; i < (length & (~3)); i += 4)
...{
arr[i] = original[length - i - 1];
arr[i+1] = original[length - i - 2];
arr[i+2] = original[length - i - 3];
arr[i+3] = original[length - i - 4];
}
for (int i = length & (~3); i < length; i++)
...{
arr[i] = original[length - i - 1];
}
return new string(arr);
}
static string Revease22(string original)
...{
int length = original.Length;
char[] arr = new char[length];
for (int i = 0; i < length; i++)
...{
arr[i] = original[length - i - 1];
}
return new string(arr);
}
static string Revease3(string original)
...{
int length = original.Length;
StringBuilder sb = new StringBuilder(length);
for (int i = length-1; i >= 0; i--)
sb.Append(original[i]);
return sb.ToString();
}
Revease1()中对char[]进行了两次赋值(ToCharArray()和Array.Revease),所以我有想到了Revease2和Revease3()两种方法,下面是对这四种方法进行简单性能测试的代码:
static
void
Main(
string
[] args)
... {
string testString = "测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转";
DateTime start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Reverse1(testString);
}
DateTime end = DateTime.Now;
Console.WriteLine("1 : "+(end - start));
start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Revease21(testString);
}
end = DateTime.Now;
Console.WriteLine("21: " + (end - start));
start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Revease22(testString);
}
end = DateTime.Now;
Console.WriteLine("22: " + (end - start));
start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Revease3(testString);
}
end = DateTime.Now;
Console.WriteLine("3 : " + (end - start));
Console.ReadLine();
}
... {
string testString = "测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转";
DateTime start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Reverse1(testString);
}
DateTime end = DateTime.Now;
Console.WriteLine("1 : "+(end - start));
start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Revease21(testString);
}
end = DateTime.Now;
Console.WriteLine("21: " + (end - start));
start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Revease22(testString);
}
end = DateTime.Now;
Console.WriteLine("22: " + (end - start));
start = DateTime.Now;
for (int i = 0; i < 3000000; i++)
...{
string s = Revease3(testString);
}
end = DateTime.Now;
Console.WriteLine("3 : " + (end - start));
Console.ReadLine();
}
测试结果是Revease1()代码最简洁,运行速度也最快,Revease21()和Revease22()其次,Revease3()最慢。可见.net framework中实现的ToCharArray()和Array.Revease()效率还是蛮高的^_^
转:http://blog.csdn.net/happyhippy/archive/2006/10/30/1357692.aspx