递归优化之快速排序
摘要:很多人都说.net排序的效率高,抱着学习的态度观摩.net源代码。当数据类型为基本类型并且未指定排序规则时用的是本地代码(TrySZSort),否则使用快速排序的泛型实现。QuickSort[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]private static extern bool TrySZSort(Array keys, Array items, int left, int right);internal sta
阅读全文
posted @
2012-05-11 14:43
肖进
阅读(1802)
推荐(1) 编辑
直接修改临时字符串
摘要:有时候我们需要对字符串进行修改,但是.net里面的字符串是只读的,修改动作会产生一个新的字符串,多数时候这都不是我想要的结果。不过fixed还是可以帮我们解决一部分问题的,比如.ToLower、.ToUpper、.Replace(char, char)等等,不过有个限制,就是变换前后的字符串长度不变。 public unsafe static string toLower(this string value) { if (value != null) { fixed (char* valueF...
阅读全文
posted @
2012-05-10 16:26
肖进
阅读(1815)
推荐(2) 编辑
字符串连接的效率问题
摘要:字符串连接,常用的三种方式:StringBuilder、+、string.Format。很多人认为StringBuilder的效率高于+,这种观念是不正确的。一般来说,对于数量固定的字符串连接,+的效率是最高的。比如:string sql = "update tableName set int1=" + int1.ToString() + ",int2=" + int2.ToString() + ",int3=" + int3.ToString() + " where id=" + id.ToString();编译
阅读全文
posted @
2012-05-09 12:50
肖进
阅读(1114)
推荐(1) 编辑
字符串的字典序比较
摘要:字典序比较.net类库自带有string.CompareOrdinal,不过不支持char*。有时候为了效率不想重复fixed同一个字符串,而却有时候char*是stackalloc new出来的,更加不适应。还是那句话,自食其力吧。 public static unsafe int cmp(string left, string right) { if (left != null && right != null) { int length = left.Length <= right.Le...
阅读全文
posted @
2012-05-08 11:57
肖进
阅读(1662)
推荐(0) 编辑
整数转换字符串之十进制
摘要:首先声明,.net自带的ToString方法很好用,也很强大。但我个人基本上只用过最简单的方式,即无参的ToString()函数。关注性能的你也许会发现ToString是个高消费品,但是很多时候又不得不用。想要用得更舒心,那就自食其力吧。我们知道普通的十进制转换就是一个对10求余取模的循环,而求余取模对于CPU相对于其他运算来说是一件吃力的事情。而对于常数的求余取模一般都可以转换为乘法运算。思路有了,开始敲代码,经过大量Copy、Paste,终于将byte,sbyte,short,ushort,int,uint,long,ulong各个击破。 public const uint ...
阅读全文
posted @
2012-05-07 14:12
肖进
阅读(560)
推荐(0) 编辑