07 2009 档案

摘要:大家讨论了好几天,主流有几个方法,到底哪个是性能最好的呢?我自己花了点时间,写个测试程序,大家参考。估计这个问题可以结贴了。程序先声明10000个数组,然后初始化为1~9999,然后将顺序打乱,将其中一个为0的值置为随机的重复值。算法有三个:1.求和相减(大众解法)2.异或(来自http://www.cnblogs.com/Ivony/)3.我自己的方法每个方法执行N遍,并计算其执行的tick数 (数组规模不大,大了计算容易溢出)。下面是程序:[代码]多次运行,基本上ticks保持在1:1:3.5。其中运行顺序还有些关系,大家可以自己测试一下。结论:2方法最好,不会溢出;在不考虑溢出的情况下, 阅读全文
posted @ 2009-07-23 22:52 DiggingDeeply 阅读(2329) 评论(15) 推荐(1) 编辑
摘要:看了上面几个解决的,总是有些牵强,放上我写的,供大家参考。题目:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现 一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空 间,能否设计一个算法实现?时间还是o(N),无额外存储空间(说白了就是除了数组之外,不能额外开辟内存空间存储数组元素)。[代码]这个帖子挂了一天,能看懂我的方法人很少阿,为了节省大家的时间,我解释如下,假设数组有10个元素,初始化时元素如下:[代码]可以看出,相重的元素在a[4] 和a[8]处,也就是说数组循环到a[8]时才能发现相同的元素。循环一次:[代码]可以看出a[3] 阅读全文
posted @ 2009-07-22 15:51 DiggingDeeply 阅读(2991) 评论(37) 推荐(2) 编辑
摘要:1.String分配了之后就无法更改?下面的代码会造成编译错误:[代码]会造成:Error3Property or indexer 'string.this[int]' cannot be assigned to -- it is read only事实上是可以改变的:[代码]2.String不能用new来构造?由于代码[代码]会报错,没有此类ctor但是实际上string有8个ctor:[代码]3.字符串“+”会生成新的字符串?[代码]看看IL:[代码]事实上是一个字符串,编译器做了我们不知道的事情。4.StringBuilder为什么会比String性能好?[代码]+实际调用的是Strin 阅读全文
posted @ 2009-07-10 09:19 DiggingDeeply 阅读(5171) 评论(21) 推荐(2) 编辑
摘要:为了赶紧把首页刷新顺溜,给大家传几个新闻吧。http://www.oschina.net/news/2415前一阵子关于Mono是否进Debian的问题在自由软件世界引起了相当大的争论,其中教父Richard M. Stallman还特别发表声明,劝阻Debian社区莫将Mono引入,否则将会受微软打压。今天GNOME和Mono的老大:Miguel de Icaza向社区传播了一则来自微软的好消息,即微软决定将“社区承诺协议“应用至C#和CLI。Mono是一个.NET的开源实现,它包含了.NET的主要规格,并拥有自己实现部分(如GTK#)。因为其兼顾了开发效率和运行速度,越来越多的自由软件使用 阅读全文
posted @ 2009-07-08 21:25 DiggingDeeply 阅读(1799) 评论(11) 推荐(0) 编辑
摘要:今天早上匆匆写了篇文章,上班时间也找了找资料,也没找到任何有效性的说明,所以还得自己来。还是先上一段测试代码:[代码]比较简单,就是在不同的时候打印几个字符串。我看了看IL,在Foo 的代码里发现了一个特殊的指令,用ILDASM dump出IL:[代码]leave.s IL_0028,这个指令是什么意思呢?查了查msdn:[代码]看了看,也不是很明白,到底是怎么执行呢?我想到了一个Tool,sharpdevelop,一个开源的IDE,记得好像能调式IL,下了一个安装,安下断点,调式发现leave.s实际上执行finally里的代码,然后再到IL_0028;我试着将IL_0028改为IL_002 阅读全文
posted @ 2009-07-03 21:15 DiggingDeeply 阅读(2794) 评论(16) 推荐(0) 编辑
摘要:在windows中,每个线程默认的栈大小是1M,托管线程也一样。在32位windows中,用C#在系统中最多可以创建多少个线程呢?答案稍后说。大家都知道try...catch...finally是用来控制异常的流转,一般说来finally是最后一班岗哨,问100个人,99个肯定说一定会执行。是的,一般来讲确实是能执行到的,原因是什么呢?比如在try或catch里return之后为什么还能执行到finally呢?答案是因为return只是把返回值放入相应的地方(一般来讲是寄存器),准备返回;在一个函数返回之前,也就是ret指令调用之前,还有一些代码需要执行,就是清空堆栈(弹出入栈的压入的参数,函 阅读全文
posted @ 2009-07-03 07:30 DiggingDeeply 阅读(7795) 评论(36) 推荐(0) 编辑