C#效率极子 - 精益求精
自动化+性能优化
摘要: 有时候我们需要给线程传参,而.net的ParameterizedThreadStart不支持泛型,参数只能是object,使用起来有点小不爽的感觉。其实只要简单的包装一下Thread,就能在使用的时候心情舒畅了。 /// <summary> /// 泛型参数线程 /// </summary> /// <typeparam name="parameterType">参数类型</typeparam> public struct thread<parameterType> { /// <summary> // 阅读全文
posted @ 2012-05-14 14:40 肖进 阅读(834) 评论(0) 推荐(0) 编辑
摘要: 很多人都说.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 肖进 阅读(1799) 评论(1) 推荐(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 肖进 阅读(1813) 评论(3) 推荐(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 肖进 阅读(1110) 评论(3) 推荐(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 肖进 阅读(1654) 评论(0) 推荐(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 肖进 阅读(555) 评论(2) 推荐(0) 编辑