政务网站建设办法,百度能收录的免费网站,宁波seo网络推广代理公司,建设网站公司不给源代码#xff08;4#xff09;继续优化――用空间换取时间 现在对每一个字符#xff0c;都要用get_Item(object key)方法过一遍#xff0c;可这个乖乖方法那么长#xff0c;肯定太耗时间了#xff0c;能不能用更简单的手段呢#xff1f;改Hashtable#xff1f;哇#xff0c…4继续优化――用空间换取时间 现在对每一个字符都要用get_Item(object key)方法过一遍可这个乖乖方法那么长肯定太耗时间了能不能用更简单的手段呢改Hashtable哇那代码叫一个看不懂。仔细琢磨琢磨有了直接用数组每一个汉字对应一个Int16以该值为索引数组中在那个位置的值为值这样最快速了。就是占点空间内存便宜嘛。反正这东西只初始化一次占不了多少k。新程序如下 1public class QuickChineseConvert 2{ 3 static char[] _lib; 4 static int _size; 5 6 static QuickChineseConvert() 7 { 8 _sizeUInt16.MaxValue; 9 Init();10 }11 static string GB_lib……;12 static string BIG5_lib……;1314 private static void PushIntoArray(char[] c , string g, string b)15 {16 for (int i0;ig.Length;i)17 {18 c[Convert.ToUInt16(g[i])]b[i];19 }20 }2122 private static void Init()23 {24 _lib new char[_size];25 PushIntoArray(_lib,GB_lib,BIG5_lib);26 }2728 public static char ToBIG5(char inputChar)29 {30 char temp _lib[Convert.ToUInt16(inputChar)];31 return temp0?inputChar:(char)temp;32 }3334 public static string ToBIG5(string inputString)35 {36 StringBuilder sb new StringBuilder();37 for (int i0;iinputString.Length;i)38 {39 sb.Append(ToBIG5(inputString[i]));40 }41 return sb.ToString();42 }43} 这样的话对于每一个字符只进行几个简单的操作了Convert.ToUInt16(inputChar)从数组中取值_lib[Convert.ToUInt16(inputChar)]然后就是return temp0?inputChar:(char)temp;对比Hashtable臭长臭长的get_Item(object key)这下简单多了当然要付出一定代价代价就是要弄一个大小为UInt16.MaxValue的数组不大嘛。 测试性能很鼓舞人心1857万字/s5Go on........... 还能继续优化吗数组不是还要检查边界条件吗用指针书上说能提高性能17%。17%少了点不过也试一试。测试结果表明性能没怎么提高。现在性能瓶颈在传值return那一块用refout什么的试一试做了以下类似的改动这个性能又提了到差不多10倍。 1 public static void ToBIG5(ref char inputChar)2 {3 char temp LibGB2BIG5[Convert.ToUInt16(inputChar)];4 if (temp!0) inputChartemp;5 } 1 public static void ToBIG5(ref char[] inputString)2 {3 for (int i0;iinputString.Length;i)4 {5 inputString[i]ToBIG5(inputString[i]);6 }7 } 测试结果1.444亿字/s。10个指令周期一个字符应该不能再优化了吧到此为止吧这性能应该够用了. 不过这个结果有点伪因为必须传入字符或字符数组。而String是只读的使用过程必须复制一遍用String做参数性能只到的了8000万字/s左右 6优化路径小结 简单的方法Replace30万字/s -------采用更好的数据结构和算法Hashtable300万字/s-------用reflector查看Hashtable代码做进一步的优化500万字/s-------分析问题所在直接采用数组用空间换取时间1850万字/s-------采用ref,out等技巧做进一步优化1.44亿字/s传数组8000万字/s传string