代码改变世界

C# 线程手册 第六章 线程调试与跟踪 使用不同的监听器程序

2012-04-24 22:26 by DanielWise, 3633 阅读, 4 推荐, 收藏, 编辑
摘要:在这部分,我们将了解如何改变默认的监听器程序。Trace 类和Debug类暴露了监听器集合(一系列监听程序集合)。如果不添加任何新的监听类,DefaultTraceListener 将指向由Visual Studio.NET 提供的调试输出窗口。然而,.NET Framework 提供另外可以用作监听程序的两个类: 如果你需要跟踪一个不在Visual Studio 中执行的多线程应用程序的行为,那么你需要将默认监听器改成以上列表中的某一个。通常情况下,调试输出窗口仅在调试过程中可用。使用这两个类,你可以选择将跟踪消息写入Windows 事件日志中或者一个文本文件中。一般来说,如果你知道你的程. 阅读全文

C# 线程手册 第六章 线程调试与跟踪 代码跟踪

2012-04-23 21:55 by DanielWise, 2979 阅读, 3 推荐, 收藏, 编辑
摘要:我们下一个将要分析的代码检测技术是跟踪。在一个多线程应用程序中,这个技术非常重要。当已经启动了多个任务时,你可以跟踪一个线程的行为和相互之间的各个线程之间的影响。我们稍后将看到在这种情况下使用调试器是不现实的。.NET Framework 提供了很多有用的类来帮助开发人员轻松地实现跟踪功能。让我们看一下.NET Framework 提供的System.Diagnostics 命名空间中的跟踪类。 1. Trace: 这个类有很多向一个监听器写消息的静态方法。默认情况下,VS.NET 中的调试输出窗口将被用来作为监听程序,由于使用了监听器集合,所以你可以添加不同的监听器,比如文本监听器或者Wi. 阅读全文

C# 线程手册 第六章 线程调试与跟踪

2012-04-21 16:41 by DanielWise, 15926 阅读, 5 推荐, 收藏, 编辑
摘要:调试与跟踪是两个经常使用到的技术,这两种技术对程序员是非常必要的。前者允许开发人员分析一个程序的变量值以及代码,一步一步跟踪代码流程。后者允许我们跟踪我们应用程序的行为,在一个监听器(一个日志文件,Windows 事件日志等)中显示信息。它们是创建鲁棒性应用程序的基础,因为它们给开发人员提供了一个简单的方式去跟踪并理解我们的应用程序是如何工作的。这两种技术最大的不同是跟踪可以在一个程序运行过程中完成,而调试用于设计阶段以及我们的最终版程序发布之前。 桌面应用程序开发人员通常有出色的调试技术支持,能够使用断点去检查变量内容。.NET 在这方面也不例外,但是在一个多线程应用程序中使用断点来观察一. 阅读全文

C# 线程手册 第五章 多线程应用程序 .NET 中的扩展性

2012-04-19 22:27 by DanielWise, 2703 阅读, 6 推荐, 收藏, 编辑
摘要:如果你有一个多处理器系统,那么你将有机会体验到线程真正的价值。Windows 操作系统负责向处理器分配线程,正如你在本书中看到的那样,启动一个进程会自动运行一个线程。.NET Framework 不提供细粒度的处理器分配控制,而是允许操作系统控制调度,这是由于操作系统比CLR 更加了解处理器的负载。CLR 负责提供一些诸如整个进程运行在哪个处理器上的控制。然而,一个进程中的所有线程都会运行在一个处理器上,控制进程中的线程运行在哪个处理器上的内容不会在本书中介绍。 如果你只有一个主线程,那么在这个线程中的每个任务都会运行在同一个处理器上。然而,如果系统中又新建了一个线程,那么操作系统负责调度这. 阅读全文

C# 线程手册 第五章 多线程应用程序 一个多线程微软消息队列(MSMQ)监听器

2012-04-15 15:16 by DanielWise, 9295 阅读, 5 推荐, 收藏, 编辑
摘要:在这部分,我们将使用ThreadPool 和MSMQ 进行消息收发。MSMQ 是一个分布式队列,通过MSMQ 一个应用程序可以异步地与另外一个应用程序通信。 在一个典型的场景中,我们要向维护一个队列的MSMQ 服务器发送消息,MSMQ 发送方与MSMQ 服务器(特定队列)之间创建一个连接并向那个队列发送消息。一个MSMQ 接收器接收由MSMQ发送方发送的消息。MSMQ 接收方需要监听一个特定的队列以接收发送到这个队列上的消息。MSMQ服务器在MSMQ发送方和接收方之间起到了一个中转的作用,但MSMQ发送方不知道还有一个MSMQ接收方,反之亦然。 在我们的程序中,我们将开发一个MSMQ发送程序. 阅读全文

C# 线程手册 第五章 扩展多线程应用程序 在C#中使用线程池

2012-04-09 22:08 by DanielWise, 2431 阅读, 2 推荐, 收藏, 编辑
摘要:本章的之前部分内容主要介绍如何在.NET Framework 中使用线程池的概念。现在我们要介绍如何使用C# 实现创建并使用线程池的.NET 应用程序。如之前描述的那样,System.Threading 命名空间中包含的ThreadPool 类可以被用于在.NET 应用程序中创建一个线程池。 在我们真正编码之前,我们必须对ThreadPool 类中的两个重要规则非常清楚。分别是: 1. 每个应用程序域中只能有一个ThreadPool 对象 2. 我们第一次调用ThreadPool.QueueUserWorkItem() 方法时会创建一个ThreadPool 对象,通过一个定时器或者注册的等待. 阅读全文

C# 线程手册 第五章 扩展多线程应用程序 剖析ThreadPool 类

2012-04-05 22:27 by DanielWise, 3598 阅读, 2 推荐, 收藏, 编辑
摘要:在这部分,我们将查看ThreadPool 类的多个方面并学习如何在我们的.NET 应用程序中使用ThreadPool 类的内容创建线程池。ThreadPool 类提供的线程可以用来做以下事情: 1. 处理工作组件 2. 处理异步I/O 调用 3. 处理定时器 4. 等待其他线程 下表给出了ThreadPool 类中的方法以及对应的功能。 上表中的QueueUserWorkItems() 和 RegisterWaitForSingleObject() 方法在线程池中起了非常重要的作用。我们将深入研究每个方法。现在看一下这两个方法的语法和一个用C# 写的小例子: BindHandle() 方法.. 阅读全文

C# 线程手册 第五章 扩展多线程应用程序 CLR 和 线程

2012-04-03 22:35 by DanielWise, 2065 阅读, 2 推荐, 收藏, 编辑
摘要:设计CLR 的目的是创建一个提供多种服务(比如编译、垃圾回收、内存管理以及基于.NET 平台的线程池技术)的托管代码环境。 当然,Win32 平台和.NET Framework 平台在定义我们的应用程序使用的用来作为线程宿主的进程方面是不同的。在传统Win32 应用程序中,每个进程都由一个线程集合组成。如果一台机器仅有一个CPU,那么每个线程都要与其他线程交换线程本地存储和调用堆栈以实现时间轮转。单一处理器基于线程优先级来为每个线程分配时间片。当一个特定线程的时间片用完以后,它会被暂停执行同时其他线程被允许执行它的任务。在.NET Framework 中,每个Win32 进程都被逻辑上划分为. 阅读全文

C# 线程手册 第五章 扩展多线程应用程序 - 什么是线程池

2012-03-26 17:11 by DanielWise, 2393 阅读, 1 推荐, 收藏, 编辑
摘要:概述 到目前为止我们使用多线程应用程序的目的是尽可能多地使用计算机处理器资源。所以,看起来我们仅需要为每个独立的任务分配一个不同的线程,并让处理器确定在任何时间它总会处理其中的某一个任务。额,对小系统来说这样做很好。但是当系统越来越复杂时,线程的数量也会越来越多,操作系统将会花费更多时间处理锁分配,理清线程之间的关系,处理程序指令的时间实际上是很少的。为了让我们的程序具备可扩展性,我们将不得不对线程进行一些控制。 对那些生存周期比较短的线程来说,使用线程池来处理任务要比为每个任务都创建一个线程然后顺序地回收它们要高效得多。一个任务,在概念上说,可以是一个单一方法的执行过程或者一系列方法的执行过 阅读全文

C# 线程手册 第四章 线程设计原则 管道线程模型

2012-03-18 20:03 by DanielWise, 1812 阅读, 2 推荐, 收藏, 编辑
摘要:管道线程模型基于一系列任务,每个任务都依赖于前一个任务。我们看一下图 5 的描述:图 5 在上面的图片中,主线程创建了一系列线程,每个线程都要等待之前的线程完成以后才能执行。如果你的任务有特定阶段而且每个阶段都依赖其他阶段,那么这种线程关系是很适合的。例如,你的任务可能是处理输入数据的而且整个过程有一些子任务: 1. 过滤所有的不合法字符, 比如<, >, ! 等等。 2. 检查数据是否被正确地格式化了。 3. 使用货币符号和十进制小数点对所有数字进行格式化。 4. 处理输出。这种情况下,只有上一个任务完成了以后下一个任务才可以开始。在上一篇讨论的模型中,按顺序执行就是我们实际上处 阅读全文
上一页 1 2 3 4 5 6 7 ··· 26 下一页