這個測試包含
1、while for 循環語句的測試;
2、StringBuilder 追加字符方法的測試;
Insert 和 Append
3、byte的相關方法;
BitConverter類byte[] 轉換的集合,
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
namespace aMao.Common
{
class Program
{
static void Main(string[] args)
{
StringBuilder sb=new StringBuilder();
int m=0;
//控制字節長度
while (m++<1)
{
sb.AppendFormat("當前時間");
}
//被測方法循環次數
int n=200000;
string t="";
byte[] bs=System.Text.Encoding.Default.GetBytes(sb.ToString());
//byte本身的toString()方法
DateTime tm=DateTime.Now;
for (int j=0; j<n; j++)
{
t=byteToString(bs);
}
Console.WriteLine("byteToString "+((DateTime)DateTime.Now-tm).TotalMilliseconds);
Console.WriteLine(t);
//遍歷添加到stringbuilder for insert
tm=DateTime.Now;
for (int j=0; j<n; j++)
{
t=byteTostring_for_insert(bs);
}
Console.WriteLine("byteTostring_for_insert HEX_TABLE "+((DateTime)DateTime.Now-tm).TotalMilliseconds);
Console.WriteLine(t);
//遍歷添加到stringbuilder while append
tm=DateTime.Now;
for (int j=0; j<n; j++)
{
t=byteTostring_while_Append(bs);
}
Console.WriteLine("byteTostring_while_Append HEX_TABLE "+((DateTime)DateTime.Now-tm).TotalMilliseconds);
Console.WriteLine(t);
//遍歷添加到stringbuilder for append
tm=DateTime.Now;
for (int j=0; j<n; j++)
{
t=byteTostring_for_Append(bs);
}
Console.WriteLine("byteTostring_for_Append HEX_TABLE "+((DateTime)DateTime.Now-tm).TotalMilliseconds);
Console.WriteLine(t);
//直接使用自帶BitConverter
tm=DateTime.Now;
for (int j=0; j<n; j++)
{
t=BitConverter.ToString(bs);
}
Console.WriteLine("BitConverter "+((DateTime)DateTime.Now-tm).TotalMilliseconds);
Console.WriteLine(t);
/*******測試while 和 for**********/
tm=DateTime.Now;
whileRun(n * n);
Console.WriteLine("whileRun "+((DateTime)DateTime.Now-tm).TotalMilliseconds);
tm=DateTime.Now;
forRun(n * n);
Console.WriteLine("forRun "+((DateTime)DateTime.Now-tm).TotalMilliseconds);
tm=DateTime.Now;
/*****************/
Console.ReadLine();
}
const string HEX_TABLE="0123456789abcdef";
// static char[] HEX_TABLE="0123456789abcdef".ToCharArray();
public static string byteTostring_for_Append(byte[] b)
{
StringBuilder sb=new StringBuilder();
int n=b.Length;
int tmp;
for (int i=0; i<n; i++)
{
tmp=b[i];
sb.Append(HEX_TABLE[tmp>>4]);
sb.Append(HEX_TABLE[tmp&0xf]);
}
return sb.ToString();
}
public static string byteTostring_while_Append(byte[] b)
{
StringBuilder sb=new StringBuilder();
int n=b.Length;
int tmp;
/***/
int i=0;
while (i<n)
{
tmp=b[i];
sb.Append(HEX_TABLE[tmp>>4]);
sb.Append(HEX_TABLE[tmp&0xf]);
i++;
}
/***/
return sb.ToString();
}
public static string byteTostring_for_insert(byte[] b)
{
StringBuilder sb=new StringBuilder();
int n=b.Length;
int tmp;
int idx=0;
for (int i=0; i<n; i++)
{
tmp=b[i];
sb.Insert(idx++, HEX_TABLE[tmp>>4]);
sb.Insert(idx++, HEX_TABLE[tmp&0xf]);
}
return sb.ToString();
}
/// <summary>
///
/// </summary>
/// <param name="b"></param>
/// <returns></returns>
public static string byteToString(byte[] b)
{
StringBuilder sb=new StringBuilder();
int n=b.Length;
for (int i=0; i<n; i++)
{
sb.Append(b[i].ToString("x").PadLeft(2, '0'));
}
return sb.ToString();
}
public static string byteTostring(byte[] b, byte bt_key)
{
StringBuilder sb=new StringBuilder();
int n=b.Length;
int tmp;
int idx=0;
for (int i=0; i<n; i++)
{
tmp=(b[i]^bt_key);
sb.Insert(idx++, HEX_TABLE[tmp>>4]);
sb.Insert(idx++, HEX_TABLE[tmp&0xf]);
}
return sb.ToString();
}
public static void whileRun(int n)
{
int i=0;
while (i<n)
{
i++;
}
}
public static void forRun(int n)
{
for (int i=0; i<n; i++)
{
}
}
public static bool ValidateRight(int iAllRight, int iCurrRight)
{
if (iAllRight==(iAllRight|iCurrRight))
return true;
return false;
}
}
}
輸出結果:
byteToString 941.3536
b5b1c7b0cab1bce4
byteTostring_for_insert HEX_TABLE 590.8496
b5b1c7b0cab1bce4
byteTostring_while_Append HEX_TABLE 180.2592
b5b1c7b0cab1bce4
byteTostring_for_Append HEX_TABLE 190.2736
b5b1c7b0cab1bce4
BitConverter 80.1152
B5-B1-C7-B0-CA-B1-BC-E4
whileRun 4977.1568
forRun 5147.4016
結論
1、while for 循環語句的測試;
執行了40000000000次空循環有些差距,但有時竟然速度相同。所以while for基本任意用。
2、StringBuilder 追加字符方法的測試;
Insert 和 Append ,append方法速度快。
3、byte的相關方法;
BitConverter類byte[] 轉換的集合,MS提供的方法速度很快,但出來的字符串 把byte[] 以‘-’分隔,如果進行replace("-","")操作,沒有自定義方法快,並且byte[]越大效率越低。
自定義的方法比較,明天再寫^_*