- 博客(11)
- 资源 (5)
- 收藏
- 关注
原创 统一的获取,设置UI控件值
在编写WebForm或WinForm程序时,我们经常需要编写很多获取,设置UI控件值代码.这确实是一件重复,麻烦而又容易出错的工作.所以我们应该将这个工作交给计算机去做解放我们的劳动力.一般来说UI上的控件都是和我们的EntityObject相对应的,所以利用反射将EntityObject中属性值赋给控件或通过控件填充EntityObject是非常方便的.但是要想让计算机自动干活就要顶一个规则,就
2007-12-31 19:37:00 1310
原创 实用的泛型Singleton类
Singleton模式是最常的设计模式之一,我们会经常写这类代码.因其基本原理就是保存一个静态的对象实例,所以我们便能利用泛型写出一个通用的Singleton类. 代码很简单: public class SingletonT> ...{ static readonly T _t; static Singleton() ...
2007-12-24 12:22:00 1417
原创 yield,很好很强大
yield是c#2.0中引入的关键词,以前只是匆匆看过它的用法,觉得不过是个语法糖.这两天突然对yield产生了兴趣进行了一些小实验.有了一些心得放在这里与大家共享. yield确实是一块非常好的语法糖,方便我们写iterator.比如我要给Tuple加一个迭代功能就非常容易.//我以Tuple举例public class TupleT1, T2, T3> : TupleT
2007-12-23 13:41:00 1450 11
原创 Tuple补遗
在我前面的文章利用.net泛型实现了一个Tuple.在这两天的使用中发现还要再加点东西才能好用.有三个地方:1Tuple要想Array,Enum,Delegate一样有一个基类,这样在不确定Tuple类型参个数时可以用这个基类.2.要增加一个判断函数,用来确定任意给定的一个对象是否属于Tuple中的类型(也许再加一个判定是否Tuple内的item的函数).3.增加默认构造,这样做是为了那些只要
2007-12-22 14:00:00 908
原创 生产/消费者模型的实现 —— InfoQueue
生产-消费者模型是多线程编程中的基本模型也是运用最多的模型,而它的原理就是一个线程向缓冲池中扔东西,另一个线程从缓冲池中把东西拿走.所以在这个模型中缓冲池是一个核心,它是生产-消费者之间的桥梁并且能进行一些控制.池满了则生产者必须等待,池空了则消费者必须等待.这里的关键就是缓冲池必须是固定大小不能随意扩充,因为程序一瞬间就能把堆耗尽.就是好比我们去蛋糕店买蛋糕,柜台和货架就是缓冲池糕点师是不
2007-12-21 11:27:00 965 2
原创 使用尾递归计算Fibonacci数列
在过程式,面向对象编程中我们使用递归解决问题的机会不多.但是使用递归方式解决问题是一种比较直观而且简洁的方式,不过编译器对递归没有特别的优化.所以我们很容易写出效率不高的递归程序.而所谓尾递归就是在递归的时候进行计算.下面我以Fibonacci数列为例来说明普通递归和尾递归的不同. 普通递归:public long Fib_Common(int n) {
2007-12-19 22:54:00 4796 3
原创 写个比Monitor性能好的锁
Monitor或Lock(this) {}形式实际上调用的是windows底层的CRITICAL_SECTION详见这里.临界区在单核下是性能最好的锁,我boss曾做过多次尝试都无法超过这个锁的性能只能达到接近.但是这个锁在多核下表现并不理想,因为它是这样实现的(我boss查看了汇编)在多核下它会先做50次自旋在锁.可能ms的初衷是在多U情况下一个线程做自旋的时候另一个U就把工作线程的工作做完
2007-12-18 23:04:00 1352
原创 多线程编程中的本质问题
在编写多线程程序的时候我们经常需要判断临界条件,如对象池中的可用数,某一个对象是否可用等状态.当我们这么做的时候其实就已经错了,为什么这么说因为在我们的潜意识里一直在使用绝对时间点来判定多线程程序.因为我们习惯性的用锁然后判定当前时间点的临界条件状态并作出相应处理.这样做当然可以但是在理念上错了,锁是为了同步资源用的而不是临界条件(当然你们做也没关系不过我向往无锁并发).那我们不依赖绝对时
2007-12-16 22:00:00 1365
原创 自己实现一个Semaphore
其实这是我boss的想法,我一开始听他这么说也觉得比较差异,ms已经写好了何必再自己写一个.答案有两个:1MS写的东西未必就是最好的,如完成端口,heap等.2semaphore是多线程编程中的核心元素所以有必要提速.我们都知道在多线程中ms提供的多个现成阻塞核心对象中critical(monitor),mutex,semaphore,event(EventWaitHandle),even
2007-12-15 22:15:00 1696
原创 自己实现一个Comparer
虽然在.Net类库里有System.Collections.Generic.Comparer接口实现一个特定的比较器太麻烦了,再者我不喜欢动不动就继承接口这种理论的面向对象编程方式.所以就自己写个Comparer看着舒心用着踏实. 自己写比较器只要能实现两个功能就行,1能支持基础类型,2能够方便扩展自定义类型.基于此我使用委托(System.Comparison 为什么要用De
2007-12-14 15:07:00 1695 1
原创 利用.Net泛型实现Tuple
虽然dotnet范型功能很弱不过在实现Tuple时却很好,因为dotnet把同名类的不同范型参看做不同类型.所以对于Tuple和Tuple是不同的类.有了这个规则就可以超级简单的实现一个Tuple(c++的模板可就复杂了)public class Tuple { T1 _t1; public Tuple(T1 t1) { this
2007-12-13 12:06:00 1900 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人