c# 字符串操作的性能测试 未知编码 byte[] 转 string

这个测试包含

1、while for 循环语句的测试;
2、StringBuilder 追加字符方法的测试;
       Insert 和 Append
3、byte的相关方法;
      BitConverter类byte[] 转换的集合,

using  System;
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[]越大效率越低。

自定义的方法比较,明天再写^_*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值