线程池中的I/O线程
    
            
摘要:上一篇文章主要介绍了如何利用线程池中的工作者线程来实现多线程,使多个线程可以并发地工作,从而高效率地使用系统资源。在这篇文章中将介绍如何用线程池中的I/O线程来执行I/O操作,希望对大家有所帮助。目录:一、I/O线程实现对文件的异步二、I/O线程实现对请求的异步三、总结一、I/O线程实现对文件的异步1.1 I/O线程介绍:对于线程所执行的任务来说,可以把线程分为两种类型:工作者线程和I/O线程。工作者线程用来完成一些计算的任务,在任务执行的过程中,需要CPU不间断地处理,所以,在工作者线程的执行过程中,CPU和线程的资源是充分利用的。I/O线程主要用来完成输入和输出的工作的,在这种情况下, 计
        
阅读全文
摘要:也是C#代码吗 --- 代码阅读性进阶:中文为王没有太多的罗嗦,代码本身已经足够。如果,要添几个标签的话就是: 中文化流畅性API。只有几点补充说明:1。 这都是真实可运行的代码,请看测试状态:点击Login as guest2。 测试使用Machine Specification, 重点是Establish部分。3。仅仅使用于集成测试(用户故事);不建议业务领域和单元测试使用。4。这里只列出最终使用代码(测试说明一切);避免细节/实现的干扰。实现请看:Examples.cs"一个“语法的实现”要“语法实现得心应手武器库:MSpec本文所涉及使用的工具, 见前文:我的.Net武器库 
        
阅读全文
摘要:利用TCP传输协议实现基于Socket的聊天程序(高级版_多线程)大家好,上次我写了一个初级版本的聊天程序,程序只是实现简单的连接通信,基于控制台实现,运用了TCP和UDP两种传输协议。今天我写了一个基于窗体的聊天程序,使用了多线程,实现的功能类似于QQ的聊天,不同的是只有一个服务器端,但可以有多个客户端与其通信,只能实现简单的文字信息交流。。。同样,这个聊天程序也需要一个服务器端,和N个客户端来模拟实现,首先我们来搭建服务器端首先贴上服务器端的界面图:界面很简单,左边一个客户端在线的列表,一个显示消息的文本框和一个发送消息的文本框,为了演示简单,我把IP和Port都固定为127.0.0.1和
        
阅读全文
摘要:目录:一、上节补充二、CLR线程池基础三、通过线程池的工作者线程实现异步四、使用委托实现异步五、任务一、上节补充对于Thread类还有几个常用方法需要说明的。1.1 Suspend和Resume方法这两个方法在.net Framework 1.0的时候就支持的方法,他们分别可以挂起线程和恢复挂起的线程。但在.net Framework 2.0以后的版本中这两个方法都过时了,MSDN的解释是这样:警告:不要使用Suspend 和Resume方法来同步线程的活动。您无法知道挂起线程时它正在执行什么代码。如果您在安全权限评估期间挂起持有锁的线程,则 AppDomain中的其他线程可能被阻止。如果您在
        
阅读全文
摘要:性能是考量一个软件产品好坏的重要指标,与产品的功能有着同等重要的地位。用户在选择一款软件产品的时候基本都会亲身试验比较同类产品的性能。作为选购那个软件重要因素之一。软件的性能指什么降低内存消耗在软件开发中,内存消耗一般作为次要的考虑,因为现在的计算机一般都拥有比较大的内存,很多情况下,性能优化的手段就是空间换取时间。但是,并不是说,我们可以肆无忌惮的挥霍内存。如果需要支持在大数据量的用例时,如果内存被耗尽,操作系统会发生频繁的内外存交换。导致执行速度急剧下降。提升执行速度加载速度。特定操作的响应速度。包括,点击,键盘输入,滚动,排序过滤等。性能优化的原则理解需求以MultiRow产品为例,Mu
        
阅读全文
摘要:模版,大家肯定都比较熟悉的一个概念,刚学C#(Java)那会老师就告诉我们,类是对象的模版。今天写这个模版其实是我用于生成js代码的,当然不限于生成js,其实跟codesmith有着差不多的功能,只是没那么强大,下面我写一些思路我这个模版目前用于生成Ext的Grid和添加,编辑表单,所以主角的又(怎么会是又呢,呵呵)是数据库表,不过这些信息被我存到前一篇博客里提到的Model里去了(通过特性的方式)。 出于方便,我还是把Model的代码贴一下:Model//------------------------------------------------------------------...
        
阅读全文
摘要:引言:最近一段时间都在研究关于.Net线程的内容,觉得线程是每个程序员都应该掌握的,所以写下这个线程的系列希望能给大家学习过程中一些帮助,同时也是自己对线程的巩固,当中如果有什么错漏还请大家指出,这样我们可以互相得到进步。目录:一、线程的介绍二、线程调度和优先级三、前台线程和后台线程四、简单线程的使用一、线程的介绍在介绍线程之前, 很有必要知道什么是进程,以及与线程的关系。进程(Process)是应用程序的实例要使用的资源的一个集合(从可以简化理解:进程就是一种资源,是应用程序所用的资源)。每个应用程序都在各自的进程中运行来确保应用程序不受其他应用程序的影响,如果一个应用程序失败了, 只会影响
        
阅读全文
摘要:1、什么是反射 Reflection,中文翻译为反射。这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如: Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。MethodInfo包含方法的信息,通过这个..
        
阅读全文
摘要:TCPTCP (Transmission Control Protocol)属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,TCP支持的应用协议主要有:Telnet、FTP、SMTP等TCP是面向对象的连接,是安全可靠的,是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我 们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发
        
阅读全文
摘要:Performance study in Microsoft.ApplicationDataBlock.SqlHelperSupported byNova OutsourcingI recently got interested in Microsoft.ApplicationDataBlock.SqlHelper.ExecuteNonQuery as it was mentioned by an Umbraco developer in my team. I find the method allows programmers to assign parameters in a quite 
        
阅读全文
摘要:工欲善其事,必先利其器。磨刀不误砍柴工。这些成语、俗语都告诉我们做事情前,先把用到的工具打理好,用起来才会得心应手,工作起来才会事半功倍!古代如此,在信息化的今天更是如此。作为一个程序员,每天的工作就是敲代码,合理的配置我们所用的IDE,会让我们的工作事半功倍。有的人可能会说,现在的IDE都非常的智能了,不需要我们自己手动配置了。的确现在的工具真的是越来越好用,几乎所有的常用开发工具都有智能提示、自动补全代码等贴心功能,为我们的工作带来了很大的方便,但仍有一些重复的工作需要我们手动来完成。像我们在新建类的时候,经常会需要加入自己或公司的信息、版权、以及创建时间等信息,而这些东西一般都是固定的,
        
阅读全文
摘要:ClownFish:比手写代码还快的通用数据访问层阅读目录开始ClownFish是什么?比手写代码还快的执行速度简单,一个调用完成你要的全部功能方便,你需要的代码已经准备好了定义数据实体类型不再是费力的体力劳动通用,可以非常简单地实现对多种数据库的支持灵活,SQL语句放在哪里随便你XmlCommand是什么?可监控,图形的工具会告诉你每个数据访问的细节关于示例代码其它待补充内容最近花了二个月的业余时间重写了我以前的通用数据访问层, 由于是重写,所以我给这个项目取了个新名字:ClownFish回到顶部ClownFish是什么?ClownFish是我编写的一个通用数据访问层,设计它的目的是为了:1
        
阅读全文
摘要:随笔- 22 文章- 0 评论- 180Linux下MemCached安装及c#客户端调用一、Linux下MemCached安装和启动如果是centos可以yum安装# yum install libevent-devel如果不支持yum的系统,可以这样装libevent# cd /usr/local/src# wget http://www.monkey.org/~provos/libevent-1.4.12-stable.tar.gz# tar vxf libevent-1.4.12-stable.tar.gz# cd libevent-1.4.12# ./configure --pref
        
阅读全文
摘要:本文是一个菜鸟所写,本文面向的人群就是像我这样的小菜鸟,工作一年也辛辛苦苦学习了一年,一直没有机会梳理一下自己的知识,最近花了一些时间整理了一些C#基础知识,也算是对过去的一年做个回顾把~文章有点长,请自带瓜子和茶吧,请看下面C#基础知识简单架构图,不可能100%的全面,请见谅啊...1.值类型和引用类型 1.1堆和栈 简单的说值类型存放在堆栈上面,引用类型的数据存放在托管堆上面(它的引用地址却存放在堆栈上面)! 栈:它是一个内存数组,是一个先进后出的数据结构! 栈的特征:数据只能从栈顶进,从栈顶出! 堆:它是一个内存区域,可以分配大块区域存储某类型的数据,与栈不同的是它里面的数据可...
        
阅读全文
摘要:C#制作 Windows 服务安装程序2012-07-13 13:31 by 谢中涞, 215 阅读,0评论,收藏,编辑 最近项目中需要使用一些Win服务来处理一些类似于数据同步的业务,对于服务需要执行的业务倒是很容易的按部就班的写完了,在服务的安装部署问题上却费了一番功夫折腾.今天就借此机会在此略微总结下,一方面为后面遇到同样困惑的同学指下路,同时也为了给自己日后提个醒. 我们先来看一下我们熟悉思维中服务是如何安装的,"installutil 服务路径",没错,我们一般谈到服务安装可能最容易想起的就是这个命令了, 但是当项目越来越大之后, 去安装部署服务的兄弟们也许就不是
        
阅读全文
摘要:再造巴别塔登天(图片来源:wikipedia)那时,天下人的口音、言语,都是一样。人们开始造一座塔,塔顶通天,来传扬人们的名。神怒了,竟把人们的语言变乱了,使人们不能彼此沟通,造塔工程不得不停工。这未完的塔就是“巴别塔”,《七周七语言 理解多种编程范型》一书的封面配图典故来源。《七》一书是我闲逛时无意发现的,它用传记体的形式描述了七门不同的编程语言,每门语言分列了“三天”篇幅。算下来三七二十一,但是若以为这是系列中另一 本《二十一天精通XXX》而放弃一读的话就错过了一本好书。和《二》系书名一样《七》的主标题充当了让第一眼看到它的人拾起它探究一番的噱头。副标题才是 书的实质写照。我自以为好奇心非
        
阅读全文
摘要:曾经刚接触时多线程,认为甚是简单,短短的几行代码就可以借助封装好的方式实现自己的多线程。 这几天学习在做C/S小项目时间碰见一个调试异常,才让我真正沉下去认识线程,幸亏还有当年所学操作系统的知识,线程的调度知识,认识才更深一步。在这里我将以前的调试异常截图,这篇文章就从此处入手,解释我对线程的肤浅认识。提示信息如下图所示:仔细看代码,发现项目中的列表框(listBox)是在UI主线程中的,而引起异常操作的地方发生在逻辑处理的又一个线程之中,在非UI线程调用UI线程,修改其属性造成了这样的异常:“线程间的操作无效”,我知道只要在UI线程的构造函数关闭线程调用异常检测就可以避免这个提示,程序继续正
        
阅读全文
摘要:前言 《CLR via C#》——作者Jeffrey Richter。本书是.NET 界的经典之作,集万千荣耀于一身。最近开始看这本书,有点相见恨晚的感觉。中文翻译版早就上市了,但是为了更加直接地领悟书中的深意,还是选择英文电子版 (环保,"免费")。学习的过程做点笔记与大家分享,我也建议大家看英文原版(这样能够更获取更直接的信息,而且英文书籍普遍讲的都非常细致,非常利于自学)。关于C#/.NET性能在上次的例子里面,第二次执行Console.WriteLine()方法时,会完全跳过JITCompiler编译。因为第一次已经完全编译为了本地CPU指令并且返回了指令在内容里的
        
阅读全文
摘要:C# 获取枚举类型中所有描述信息 今天心情好;回家没什么事干;于是就坐下来写点代码打发无聊的时间;一时也不知道写点什么好呢?于是想到了最近上班经常用的获取枚举类型中的所有属性的描述信息;所以就给自己一个温故而知新的机会。本人作者作为菜鸟军团中的一员。没有多大思想与见解,所以难免发一点没多大意义的文章;希望各位谅解。 1.应用的命名空间 using System.ComponentModel; using System.Reflection; 2、定义枚举类枚举类1 public enum BagType 2 { 3 [Description("书包1")] ...
        
阅读全文
摘要:最近公司的项目中发现一个编译优化导致的bug。同事叙述为“在CPU开启out-of-order execution优化时,是有bug的”。针对这个问题,比较好的优化方法如下:?privatestaticJobManager self;privatestaticobjectasyncObj = newobject();publicstaticJobManager Instance{get{if(self == null){lock(asyncObj){if(self == null){// 正确的实现方法应该为: var temp = new JobManager(); Interlocked.
        
阅读全文