这个测试包含
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[]越大效率越低。
自定义的方法比较,明天再写^_*