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