建议80:用Task代替ThreadPool ThreadPool相对于Thread来说具有很多优势,但是ThreadPool在使用上却存在一定的不方便。比如:ThreadPool不支持线程的取消、完成、失败通知等交互性操作。ThreadPool不支持线程执行的先后次序。以往,如果开发者要实现上述功...
建议79:使用ThreadPool或BackgroundWorker代替Thread使用线程能极大地提升用户体验度,但是作为开发者应该注意到,线程的开销是很大的。线程的空间开销来自:1)线程内核对象(Thread Kernel Object)。每个线程都会创建一个这样的对象,它主要包含线程上下文信息...
建议75:警惕线程不会立即启动现代的大多数操作系统都不是一个实时的操作系统,Windows系统也是如此。所以,不能奢望我们的线程能够立即启动。Windows内部会实现特殊的算法以进行线程之间的调度,在某个具体的时刻,它会决定当前应该运行哪个线程。这反映到最底层就是某个线程分配到了一定的CPU时间,可...
分类:
编程语言 时间:
2015-08-19 16:24:09
阅读次数:
126
建议73:避免锁定不恰当的同步对象在C#中,让线程同步的另一种编码方式就是使用线程锁。线程锁的原理,就是锁住一个资源,使得应用程序在此刻只有一个线程访问该资源。通俗地讲,就是让多线程变成单线程。在C#中,可以将被锁定的资源理解成new出来的普通CLR对象。既然需要锁定的资源就是C#中的一个对象,我们...
建议77: 正确停止线程开发者总尝试对自己的代码有更多的控制。例如,“让那个还在工作的线程马上停止下来”。然而,并非我们想怎样就可以怎样的,这至少涉及两个问题。第一个问题 正如线程不能立即启动一样,线程也并不是说停就停的。无论采用何种方式通知工作线程需要停止,工作线程都会忙完手头最紧要的活,然后在它...
分类:
编程语言 时间:
2015-08-19 16:20:18
阅读次数:
140
建议74:警惕线程的IsBackground在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性。两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就会一直存在,必须所有的前台线程全部退出,应用程序才算退出。而后台进程则没有这方面的限制,如果应用程序退...
分类:
编程语言 时间:
2015-08-19 16:17:05
阅读次数:
207
建议76: 警惕线程的优先级线程在C#中有5个优先级:Highest、AboveNormal、Normal、BelowNormal和Lowest。讲到线程的优先级,就会涉及线程的调度。Windows系统是一个基于优先级的抢占式调度系统。在系统中,如果有一个线程的优先级较高,并且它正好处在就绪状态,系...
分类:
编程语言 时间:
2015-08-19 16:14:26
阅读次数:
119
一、规范目的:为提高工作效率,便于后台人员添加功能及前端后期优化维护,输出高质量的文档,在网站建设中,使结构更加清晰,代码简明有序,有一个更好的前端架构,有利于SEO优化。二、规范基本准则:符合web标准,使用具有语义的标签,使结构、表现、行为分离,兼容性优良,页面性能优化,代码简洁、明了、有序,尽...
分类:
Web程序 时间:
2015-08-19 12:34:49
阅读次数:
142
建议69:应使用finally避免资源泄漏除非发生让应用程序中断的异常,否则finally总是会先于return执行。finally的这个语言特性决定了资源释放的最佳位置就是在finally块中;另外,资源释放会随着调用堆栈由下往上执行。下面的代码验证了这一点,先定义一个需要释放的类: cla...
建议68:从System.Exception或其他常见的基本异常中派生异常微软建议:从System.Exception或其他常见基本异常之一派生异常。在Visual Studio中输入Exception,然后按快捷键Tab,VS会自动创建一个自定义异常类: [Serializable] ...