2012年10月16日
摘要: 要使用多线程开发,必须非常熟悉Thread的使用,而且在开发过程中可能会面对很多未知的问题。为了简化开发,.NET 4.0 特别提供一个并行编程库System.Threading.Tasks,它可以简化并行开发,你无需直接跟线程或线程池打交道,就可以简单建立多线程应用程序。此外,.NET还提供了新的一组扩展方法PLINQ,它具有自动分析查询功能,如果并行查询能提高系统效率,则同时运行,如果查询未能从并行查询中受益,则按原顺序查询。下面将详细介绍并行操作的方式。7.1 泛型委托使用并行编程可以同时操作多个委托,在介绍并行编程前先简单介绍一下两个泛型委托System.Func<>与Sy 阅读全文
posted @ 2012-10-16 12:13 W晴空 阅读(299) 评论(0) 推荐(0)
摘要: 从ADO.NET 2.0开始,SqlCommand就新增了几个异步方法执行SQL命令。相对于同步执行方式,它使主线程不需要等待数据库的返回结果,在使用复杂性查询或批量插入时将有效提高主线程的效率。使用异步SqlCommand的时候,请注意把ConnectionString 的Asynchronous Processing 设置为 true 。注意:SqlCommand异步操作的特别之处在于线程并不依赖于CLR线程池,而是由Windows内部提供,这比使用异步委托更有效率。但如果需要使用回调函数的时候,回调函数的线程依然是来自于CLR线程池的工作者线程。SqlCommand有以下几个方法支持异步 阅读全文
posted @ 2012-10-16 12:12 W晴空 阅读(384) 评论(0) 推荐(0)
摘要: 引言本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发。其中委托的BeginInvoke方法以及回调函数最为常用。而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作。特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用UpdatePanel。其实合理使用I/O线程在通讯项目或文件下载时,能尽量降低IIS的压力。并行编程是Framework4.0中极力推广的异步操作方式,更值得更深入地学习。希望本篇文章能对各位的学习研究有所帮助,当中有所错漏的地方敬请点评。 阅读全文
posted @ 2012-10-16 12:11 W晴空 阅读(355) 评论(0) 推荐(0)
摘要: 4.1 关于CLR线程池使用ThreadStart与ParameterizedThreadStart建立新线程非常简单,但通过此方法建立的线程难于管理,若建立过多的线程反而会影响系统的性能。有见及此,.NET引入CLR线程池这个概念。CLR线程池并不会在CLR初始化的时候立刻建立线程,而是在应用程序要创建线程来执行任务时,线程池才初始化一个线程。线程的初始化与其他的线程一样。在完成任务以后,该线程不会自行销毁,而是以挂起的状态返回到线程池。直到应用程序再次向线程池发出请求时,线程池里挂起的线程就会再度激活执行任务。这样既节省了建立线程所造成的性能损耗,也可以让多个任务反复重用同一线程,从而在应 阅读全文
posted @ 2012-10-16 12:09 W晴空 阅读(379) 评论(0) 推荐(0)
摘要: 3.1 使用ThreadStart委托这里先以一个例子体现一下多线程带来的好处,首先在Message类中建立一个方法ShowMessage(),里面显示了当前运行线程的Id,并使用Thread.Sleep(int ) 方法模拟部分工作。在main()中通过ThreadStart委托绑定Message对象的ShowMessage()方法,然后通过Thread.Start()执行异步方法。 1 public class Message 2 { 3 public void ShowMessage() 4 { 5 ... 阅读全文
posted @ 2012-10-16 12:07 W晴空 阅读(277) 评论(0) 推荐(0)
摘要: 2.1 System.Threading.Thread类System.Threading.Thread是用于控制线程的基础类,通过Thread可以控制当前应用程序域中线程的创建、挂起、停止、销毁。它包括以下常用公共属性: 属性名称说明CurrentContext获取线程正在其中执行的当前上下文。CurrentThread获取当前正在运行的线程。ExecutionContext获取一个 ExecutionContext 对象,该对象包含有关当前线程的各种上下文的信息。IsAlive获取一个值,该值指示当前线程的执行状态。IsBackground获取或设置一个值,该值指示某个线程是否为后台线程。. 阅读全文
posted @ 2012-10-16 12:05 W晴空 阅读(271) 评论(0) 推荐(1)
摘要: 1. 1 进程、应用程序域与线程的关系进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。应用程序域(AppDomain)是一个程序运行的逻辑区域,它可以视为一个轻量级的进程,.NET的程序集正是在应用程序域中运行的,一个进程可以包含有多个应用程序域,一个应用程序域也可以包含多个程序集。在一个应用程序域中包含了一个或多个上下文conte 阅读全文
posted @ 2012-10-16 12:04 W晴空 阅读(275) 评论(0) 推荐(0)
  2012年10月10日
摘要: 引言本文主要是介绍进程(Process)、应用程序域(AppDomain)、.NET上下文(Context)的概念与操作。虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助。在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助。因为时间仓促,文中有错误的地方敬请点评。目录一、进程的概念与作用二、应用程序域三、深入了解.NET上下文四、进程应用程序域与线程的关系一、进程的概念与作用进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。进程之间是相对独立的,一个进程无法直接访 阅读全文
posted @ 2012-10-10 15:03 W晴空 阅读(199) 评论(0) 推荐(0)
  2012年10月9日
摘要: usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.SqlClient;usingSystem.Threading;namespaceAppThread{publicdelegatevoidSetProcessBar();publicdelegatevoidSetText(stringText);publicpar 阅读全文
posted @ 2012-10-09 17:03 W晴空 阅读(199) 评论(0) 推荐(0)
  2012年9月22日
摘要: 一.摘要事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解.二.前言本篇文章是至今为止本系列内容最多的一篇, 足以可见其重要性. 大家反映要多列举示例. 我会在时间允许的情况下尽量多列举示例. 真正的投入生产使用的实例暂时还无法加入到文章中, 但是可能最后我会列举一些作品供大家借鉴. 另外本人水平有限, 因为我不是UI设计师. 文章可能有错误的地方, 希望大家帮忙指出, 一起学习一起进步. 在技术的世界里我们是没有任何利益瓜葛. 希望大家都抱着彼此鼓励的心态, 对于回复中的激进评论我也都会考虑, 但是希望能够彼此尊重, 阅读全文
posted @ 2012-09-22 17:22 W晴空 阅读(326) 评论(0) 推荐(0)