03 2012 档案

摘要:前阵子发现公司的网站有SQL注入漏洞,向项目经理提了以后,得到的答复异常的冷淡:“早就知道,这种asp的网站肯定有漏洞,要是Asp.net的网站就没问题”,先暂不评价此说法对错,如此冷淡的反应只能说明了对SQL注入的无知,今天就实况转播,来告诉大家SQL注入究竟有多大的危害。初步注入--绕过验证,直接登录公司网站登陆框如下:可以看到除了账号密码之外,还有一个公司名的输入框,根据输入框的形式不难推出SQL的写法如下:SELECT * From Table WHERE Name='XX' and Password='YY' and Corp='ZZ' 阅读全文
posted @ 2012-03-31 13:46 therockthe 阅读(187) 评论(0) 推荐(0) 编辑
摘要:在上一篇《C#4.0的dynamic和var及object关键字辨析》中温习了.net 4.0的dynamic关键字,今天看看C#的delegate/event/Action/Func/Predicate关键字,它们基本上.net 2.0-3.0就有了,不是新的,但新手容易晕。回顾C#发展的历史,C#1.0完全是模仿Java,并保留了C/C++的一些特性如struct,新学者很容易上手;C#2.0加入了泛型,也与 Java1.5的泛型如出一辙;C#3.0加入了一堆语法糖,并在没有修改CLR的情况下引入了Linq,简直是神来之笔,虽然很多项目出于各种各样如性能之类的原因没有采用,但非常适合小型程 阅读全文
posted @ 2012-03-30 09:57 therockthe 阅读(244) 评论(0) 推荐(0) 编辑
摘要:转自:http://www.cnblogs.com/yjmyzz/archive/2009/11/23/1608818.html一、委托Delegate一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如publicvoidHelloWorld(){Console.WriteLine("HelloWorld!");}publicvoidHelloWorld(stringname){Console.WriteLine("Hello,{0}!",name);} 复制代码但是有些时候, 阅读全文
posted @ 2012-03-30 09:48 therockthe 阅读(236) 评论(0) 推荐(0) 编辑
摘要:本篇文章的议题如下:1.Task基础介绍2.Task的创建3.获取Task的执行结果4. 补充细节1.Task基础介绍首先我们还是来看看一段简单的代码:这里展示的只是一段简单的代码,不能显示出并行编程的特点。但是我们还是从最基本的开始看,慢慢进入深一点的话题。如果你曾经用过.NET 中的多线程编程,比较一下,就会发现:这段代码虽然在底层还是使用了多线程,但是写法上却简化了很多,一行代码就实现了一个并行编程。下面我们就从Task类开始谈。Task类是Task Programming Library(TPL)中最核心的一个类,下面我将会像大家展示如何使用一些方法来创建不同类型的Task,取消Tas 阅读全文
posted @ 2012-03-30 01:34 therockthe 阅读(264) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/2151523自定义的聚合函数 所谓“聚合函数(Aggregate Function)”,其实就是对数据集合进行某种处理后得到的单一结果,比如统计一批数值型数据的平均值、最大值、最小值等。在PLINQ中,我们可以使用ParallelEnumerable类的扩展方法Aggregate()自定义一个聚合函数。 ParallelEnumerable. Aggregate()有好几个重载形式,我们来看一个最复杂的:public static TResult Aggregate<TSource, TAccumulate, 阅读全文
posted @ 2012-03-30 01:22 therockthe 阅读(384) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/21429319.1 让查询执行得更快——Parallel LINQ LINQ的出现对于.NET平台而言是一件大事,它使用一种统一的模式查询数据,并且可以紧密地与具体编程语言直接集成。LINQ语句的编写方式是“动态组合”和“递归”的,这与函数式编程语言(如F#)类似,这种编写方式的优点在于代码量小,通过动态组合一些典型的查询运算符,可以实现相当复杂的数据处理逻辑,而同样的功能如果采用传统的编码方式实现,将耗费不少的力气写代码。 .NET 4.0引入的PLINQ是LINQ的“升级换代”技术,它允许以并行方式执行LINQ 阅读全文
posted @ 2012-03-30 01:19 therockthe 阅读(177) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/21360619.3.9 处理并行计算中的异常 在这一小节中,我们来探讨一下如何并行计算中的异常捕获与处理问题。1 处理并行循环中的异常 在一个顺序执行的循环中,如果发生了一个异常,那么.NET的异常处理机制将会中止这个循环: for(int i=0;i<1000000;i++) { //串行代码:如果在此处发生异常,将导致循环的提前中止。 } 并行程序通常使用数据分区的手段,让多个线程并行执行同一个大循环的不同部分(比如将上述大循环份为4部分,用4个线程并行执行),这样一来,情况就变得复杂了。 想象一下,假设 阅读全文
posted @ 2012-03-30 01:15 therockthe 阅读(156) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/21206419.3.8 任务的取消 TPL提供了多个方式取消一个任务。1 调用Task.Cancel方法直接取消任务的执行 如果要取消一个正在运行的任务,可以调用Task.Cancel方法,此方法会设置Task对象的IsCancellationRequested属性等于true。在任务函数中,通过检查此属性值就可以知道是否需要取消操作。其代码框架如下: //需要执行的任务函数 Action taskFunction = delegate() { //...代码略 if (Task.Current.IsCancell 阅读全文
posted @ 2012-03-30 01:12 therockthe 阅读(280) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/21142319.3.6 同步多个任务 在并行计算应用程序中,通常会创建多个Task对象以执行不同的工作任务,而依据具体应用场景,这些工作任务对象之间又会有着相互协作的需求,比如可能要求某个工作任务完成以后自动启动一个或多个新的Task对象执行后继处理工作,或者某个正在执行的工作任务中途需要等待另一个工作任务执行完毕才能执行,这就是任务的同步问题。 Task类提供了ContinueWith和Wait系列方法,在“任务”的层次(而不是线程的层次)实现任务的同步。1 使用ContinueWith 例如,以下代码在task 阅读全文
posted @ 2012-03-30 01:09 therockthe 阅读(178) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/21044819.3.4任务并行库原理初探 在上一小节中,我们看到只需简单地调用Parallel类中的一些静态方法,就可以让代码并行执行。您一定会对任务并行库的强大功能有了很深的印象,一些喜欢刨根问底的读者可能会问: 任务并行库怎样实现代码的并行执行? 任务并行库的底层技术细节很复杂,要介绍它超出了本书的范畴,然而,对其工作原理作一个介绍是可能的,了解这些知识,对于开发并行程序而言是很有益的。1 并行指令的生成 软件工程师使用Paralllel类编写的并行算法,经过编译器的处理,会全部转换为对Task类相应方法和属性 阅读全文
posted @ 2012-03-30 01:06 therockthe 阅读(214) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/20819319.3.3 使用Parallel类——让一切并行起来 在TPL中,最容易使用的类是Parallel,此类提供了三个方法“群”用于实现三种常用的并行程序执行结构。1使用Parallel.Invoke并行执行任务 当我们有一系列相互独立的工作需要并行执行时,最简单的方法是使用TPL的Parallel类的Invoke()方法来并行执行它们。 例如,假设以下三个方法调用语句之间是相互独立的[1],则它们可以并行执行:StatementA();StatementB();StatementC(); 使用Parral 阅读全文
posted @ 2012-03-30 01:04 therockthe 阅读(197) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/2066403 使用任务并行库实现并行处理 上面介绍了基于线程编码实现并行处理的技术要点,可以看到还是比较繁琐的。但通过使用.NET 4.0的并行库,可以简化开发工作。我们略微详细一点地介绍一下示例程序中是如何使用任务并行库实现并行计算的。 其中的一个关键函数是ForRange()函数,先来看看它的声明: public static ParallelLoopResult ForRange( int fromInclusive, int toExclusive, Action<int, int> body) 阅读全文
posted @ 2012-03-30 01:03 therockthe 阅读(145) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/20530419.1让一切“并行”——任务并行库原理及应用19.3.1 任务并行库简介 任务并行库(TPL:Task Parallel Library)是.NET 4.0为帮助软件工程师开发并行程序而提供的一组类,位于System.Threading和System.Threading.Tasks这两个命名空间中,驻留在3个.NET核心程序集mscorlib.dll、System.dll和 System.Core.dll里。使用这些类,可以让软件工程师在开发并行程序时,将精力更关注于问题本身,而不是诸如线程的创建、取消 阅读全文
posted @ 2012-03-30 01:02 therockthe 阅读(287) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/201901在前面两讲中,基本上介绍完了并行计算基础理论与相关概念,学习不是目的,应用才是。因此,本讲将介绍一个并行计算的例子,并对.NET 4.0的并行扩展作一个总体的介绍。======================================================19.1.3 并行计算所带来的挑战 与串行执行的程序相比,开发并行程序需要软件工程师具备一个“多线程”的大脑。我们先来看一个引例,初步体会一下如何使用.NET 4.0所提供的任务并行库设计并行程序。1 并行计算引例 请读者仔细查看一下本节 阅读全文
posted @ 2012-03-30 01:00 therockthe 阅读(192) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/201375上一部分介绍了CPU与“核”以及“并行”和“并发”的区别,这一部分我们将进一步介绍并行计算的性能衡量与并行计算系统的大致分类,为后面介绍.NET 4.0的并行计算打下基础。================================3 如何衡量并行计算的性能提升? 之所以要研究并行计算,其目的是获得更好的性能。一个软件系统的性能,通常使用两个指标来进行衡量:(1) 响应速度(Responsiveness):用户向软件系统提交一个工作任务,软件系统要花费多长的时间才能处理完毕并将结果通知用户?(2) 吞 阅读全文
posted @ 2012-03-30 00:57 therockthe 阅读(249) 评论(0) 推荐(0) 编辑
摘要:转自:http://bitfan.blog.51cto.com/907048/200199开篇语:这是一个系列文章,系统介绍.NET 4.0中引入的并行扩展(包括任务并行库TPL和PLINQ)开发技术。 本系列文章中所有示例代码在VS2010 BETA1+Windows 7 RC下调试通过。 本系列文章的主要内容来自是本人将在电子工业出版社出版的新作中的一章,出于技术共享与交流目的发布,期望业界对并行计算有丰富经验的工程师指出疏漏,也希望网友提出宝贵建议。 作者金旭亮拥有本系列文章所有版权,未经本人许可,不允许将此序列文章及相关示例用于商业目的,除此之外,在网络上出于知识共享目的的复制转贴不受 阅读全文
posted @ 2012-03-30 00:55 therockthe 阅读(405) 评论(0) 推荐(0) 编辑
摘要:随着 .NET 4.0的到来,她与以前各版本的一个明显差别就是并行功能的增强,以此来适应这个多核的世界。于是引入了一个新概念---任务,作为支持并行运算的重要组成部分,同时,也作为对线程池的一个补充和完善。从所周知,使用线程池有两个明显的缺点,那就是一旦把我们要执行的任务放进去后,什么时候执行完成,以及执行完成后需要返回值,我们都无法通过内置的方式而得知。由于任务(Task)的推出,使得我们对并行编程变得简单,而且不用关心底层是怎么实现的,由于比线程池更灵活,如果能掌握好Task,对于写出高效的并行代码非常有帮助。一、新建任务 在System.Threading.Tasks命名空间下,有两个. 阅读全文
posted @ 2012-03-30 00:48 therockthe 阅读(261) 评论(0) 推荐(0) 编辑
摘要:需要用到的名空间[c-sharp] view plaincopyprint?usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Runtime.InteropServices;using System.Net;using System.Net.Sockets;using System.Runtime.InteropServices; 建立一个结构[c-sharp] view plaincopyprint?publicstructSystemTime{publicushortwYear;publicushortwMonth;publicush. 阅读全文
posted @ 2012-03-28 09:48 therockthe 阅读(1026) 评论(0) 推荐(0) 编辑
摘要:单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么做,比如:privatevoidbtnSet_Click(objectsender,EventArgse){Threadt=newThread(newParameterizedThreadStart(SetTextBoxValue));//当然也可以用匿名委托写成Threadt=newThread(SetTextBoxValue);t.Start("HelloWorld");} 阅读全文
posted @ 2012-03-21 10:49 therockthe 阅读(164) 评论(0) 推荐(0) 编辑
摘要:转自:http://www.cnblogs.com/terrylee/archive/2006/07/17/334911.html 第Ⅰ部分 开篇开篇第Ⅱ部分 创建型模式篇第1章 单件模式(Single Pattern)第2章 抽象工厂模式(Abstract Factory)第3章 建造者模式(Builder Pattern)第4章 工厂方法(Factory Method)第5章 原型模式(Protype Pattern)第6章 创建型模式专题总结第Ⅲ部分 结构型模式篇第7章 适配器模式(Adapter Pattern)第8章 桥接模式(Bridge Pattern)第9章 装饰模式(Deco 阅读全文
posted @ 2012-03-15 00:13 therockthe 阅读(179) 评论(0) 推荐(0) 编辑
摘要:概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 模型图 逻辑模型图: 物理模型图: 生.. 阅读全文
posted @ 2012-03-15 00:10 therockthe 阅读(152) 评论(0) 推荐(0) 编辑
摘要:文件访问操作示例最近在学习Win 8 Metro Style App的一些示例,接下来我写一下这段时间的学习感想。Win 8的最新版本是Window Consumer Preview版本。Metro Style App的Demo中用了大量的异步操作。(使用async 和await)。在Win8中,使用异步操作相当简单,与同步差不多,具体看运行的代码就知道了。运行示例的环境是: Window 8Consumer Preview + Visual studio 11 Beta. 下载地址。 Window 8的安装不在此处介绍。Metro style App 的Sample下载地址为。 下面是自己的 阅读全文
posted @ 2012-03-14 15:39 therockthe 阅读(293) 评论(0) 推荐(0) 编辑
摘要:方法1:new string('A', 10) ;方法2:string.Empty.PadRight(10, 'A'); 阅读全文
posted @ 2012-03-09 22:42 therockthe 阅读(972) 评论(0) 推荐(0) 编辑
摘要:线程池是一个重要的概念。不过我发现,关于这个话题的讨论似乎还缺少了点什么。作为资料的补充,以及今后文章所需要的引用,我在这里再完整而又简单地谈一下有关线程池,还有.NET中各种线程池的基础。更详细的内容就不多作展开了,有机会我们再详细讨论这方面的细节。这次,还是一个“概述”性质的,希望可以说明白这方面问题的一些概念。线程池的作用其实“线程池”就是用来存放“线程”的对象池。在程序中,如果某个创建某种对象所需要的代价太高,同时这个对象又可以反复使用,那么我们往往就会准备一个容器,用来保存一批这样的对象。于是乎,我们想要用这种对象时,就不需要每次去创建一个,而直接从容器中取出一个现成的对象就可以了。 阅读全文
posted @ 2012-03-09 15:46 therockthe 阅读(152) 评论(0) 推荐(0) 编辑
摘要:一:什么是资源在开始本文前,需要一些准备知识。首先要提出“什么是资源”。在CLR出来之后,Windows系统资源开始分为“非托管资源”和“托管资源”。 非托管资源是指:所有的Window内核对象(句柄)都是非托管资源,如对于Stream,数据库连接,GDI+的相关对象,还有Com对象等等,这些资源并不是受到CLR管理; 托管资源是指:由CLR管理分配和释放的资源,即由CLR里new出来的对象。其次再来讲,资源的释放方式。 非托管资源:需要显式释放的,也即需要你写代码释放; 托管资源:并不需要显式释放,但是如果引用类型本身含有非托管资源,则需要进行现实释放;二:显式释放的C#实现显式释放的C#实 阅读全文
posted @ 2012-03-08 23:20 therockthe 阅读(568) 评论(0) 推荐(0) 编辑
摘要:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.Remoting.Messaging; namespace AsyncCall { public partial class Form1 : Form { public Form1(... 阅读全文
posted @ 2012-03-08 11:11 therockthe 阅读(1538) 评论(0) 推荐(0) 编辑
摘要:原文地址:http://www.dozer.cc/2012/03/async-and-await-in-web-application/欢迎大家到我的博客中查看,排版会更舒服一点!.net 中的异步关于 .net 的异步,一篇文章是讲不完的,我这里就贴两篇文章让大家看一下:《正确使用异步操作》、《C#客户端的异步操作》、《细说ASP.NET的各种异步操作》另外,在 .net 4.0 中还推出了新的任务并行库(TPL),也是一种新异步模式:《任务并行库》最后,.net 4.5 又推出了全新的 async 和 await 关键字:《C#与Visual Basic的未来(上)》《C#与Visual 阅读全文
posted @ 2012-03-06 20:09 therockthe 阅读(3047) 评论(0) 推荐(2) 编辑
摘要:以下Windows 8 Consumer Preview的108个运行命令,部分命令需要以管理员身份运行命令提示符。1.appwiz.cpl:程序和功能2.calc:启动计算器3.certmgr.msc:证书管理实用程序4.charmap:启动字符映射表5.chkdsk.exe:Chkdsk磁盘检查(管理员身份运行命令提示符)6.cleanmgr: 打开磁盘清理工具7.cliconfg:SQL SERVER 客户端网络实用工具8.cmstp:连接管理器配置文件安装程序9.cmd.exe:CMD命令提示符10.自动关机命令 Shutdown -s -t 600:表示600秒后自动关机 shu.. 阅读全文
posted @ 2012-03-05 15:40 therockthe 阅读(185) 评论(0) 推荐(0) 编辑
摘要:一个偶然的瞬间,翻开了沉放已久的<C#本质论>.当翻到讲关于类的那一章节时,突然萌发了一个想法:自己的coding生涯也快两年了,可不可以对类级别来一个总结咧? 于是趁此良辰美景,勾勒了一番.在我们平时的coding中,常碰到的类级别有:普通类,密封类,接口,抽象类,当将一个普通类声明为密封类,就意味着不能对类进行派生,它就成为了一个孤立的类.当然,很多时候我们不需要这样的.我们希望高频率调用的代码被集中的放在一个类里面,在别的类里面什么都不用写就可以调用,这样提高了代码的复用性,这就是继承.很可惜,继承具有单根性,即类同时只可继承一个类.这时,接口出现了.一个类同时可以实现多个接 阅读全文
posted @ 2012-03-05 15:23 therockthe 阅读(356) 评论(0) 推荐(0) 编辑
摘要:利用 Monitor.TryEnter 来规避 .NET 线程死锁在开发多线程的应用程序时,我们会大量用到 lock (...) {} 块。如果 lock 的对象比较多,非常容易发生死锁。死锁的发生很难预料,而且一旦发生在界面线程上,界面就不再刷新响和应用户输入;如果发生在后台线程,后台线程也就阻塞不工作了,死锁必然会导致应用程序不可用。在.NET里发生死锁的原因是什么?以 C# 为例,通常 lock 语句是被转化为对一个资源的无限长时间的等待,所以一旦资源被占用而又永不释放,那么必然死锁。那么如何规避的危害呢?应用程序应该避免 lock(obj) 块,推荐使用 Monitor.TryEnte 阅读全文
posted @ 2012-03-05 02:19 therockthe 阅读(669) 评论(0) 推荐(1) 编辑
摘要:在上一讲介绍了使用lock来实现C#线程同步。实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类。先看看下面的C#源代码:publicstaticvoidMyLock() { lock(typeof(Program)) { } } 上面的代码通过lock语句使MyLock同步,这个方法被编译成IL后,代码如图1所示。图1从上图被标注的区域可以看到,一条lock语句被编译成了调用Monitor的Enter和Exit方法。Monitor在System.Threading命名空间中。lock的功能就相当于直接调用Monitor的Entry方法,所 阅读全文
posted @ 2012-03-05 02:17 therockthe 阅读(476) 评论(0) 推荐(0) 编辑
摘要:入博客园还是第一次自己写原创帖子.在博客园也学习到了挺多东西..这几天在做采集器的时候.涉及到了多线程.自己的博客园的博客也是关于网络蜘蛛的文章或者是正则表达式.以前教师教过我们多线程,.当时自己没动手.这次动手运到到了许多问题.一个就是线程池...等.在多线程操作数据库的时候一个问题纠结了哦.就是多线程的话.他们就是抢占资源来进行数据处理.那么在打开同一个数据库的时候另外一个线程也在用...导致程序执行到一部分的时候就报错了 无法继续执行了.在网上看到两个办法1共用一个连接就可以通用一个数据库连接文件(我没用这个)2其实一样可以用lock实现,把数据库操作写成一个函数,函数内加lock。c# 阅读全文
posted @ 2012-03-04 15:40 therockthe 阅读(10383) 评论(0) 推荐(0) 编辑
摘要:以下三个代码示例演示 QueueUserWorkItem 和 RegisterWaitForSingleObject 方法。第一个示例使用 QueueUserWorkItem 方法将一个由 ThreadProc 方法表示的非常简单的任务排入队列。using System;using System.Threading;public class Example { public static void Main() { // 将任务排队 ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc)); Console.WriteLine(&qu 阅读全文
posted @ 2012-03-04 03:31 therockthe 阅读(452) 评论(0) 推荐(0) 编辑
摘要:System.Threading.Interlocked类为多个线程共享的变量提供原子操作。为整型类提供原子类操作 经验显示,那些需要在多线程情况下被保护的资源通常是整型值,且这些整型值在多线程下最常见的操作就是递增、递减或相加操作。Interlocked类提供了一个专门的机制用于完成这些特定的操作。这个类提供了Increment、Decrement、Add静态方法用于对int或long型变量的递增、递减或相加操作。 示例代码:using System;using System.Threading;namespace ProcessTest{ class Program {... 阅读全文
posted @ 2012-03-04 03:18 therockthe 阅读(531) 评论(0) 推荐(0) 编辑
摘要:如下: class MObj { long m_refCount ;public:MObj(){ m_refCount = 1 ; }long AddRef(){InterlockedIncrement(&m_refCount); return m_refCount ;} long Release(){ InterlockedDecrement(&m_refCount); if( refCount ==0 ) delete this ; return m_refCount ;} }; InterlockedIncrement,InterlockedDecrement 都是保证整 阅读全文
posted @ 2012-03-04 03:16 therockthe 阅读(1560) 评论(0) 推荐(0) 编辑
摘要:首先如果读者是.Net多线程编程的老手,就不用看这篇文章了,这篇文章主要是阐述EventWaitHandler的一些基本原理和用法。 在.NET的System.Threading命名空间中有一个名叫WaitHandler的类,这是一个抽象类(abstract),我们无法手动去创建它,但是WaitHandler有三个子类,这三个子类分别是:System.Threading.EventWaitHandle,System.Threading.Mutex,System.Threading.Semaphore,这三个类都是非Abstract的,可以由开发者来创建和使用,其中本文主要讨论的是其中的Syst 阅读全文
posted @ 2012-03-04 02:57 therockthe 阅读(182) 评论(0) 推荐(0) 编辑
摘要:AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程通过调用 Set 发出资源可用的信号。调用 Set 向 AutoResetEvent 发信号以释放等待线程。AutoResetEvent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止状态。如果没有任何线程在等待,则状态将无限期地保持为终止状态。可以通过将一个布尔值传递给构造函数来控制 AutoResetEvent 阅读全文
posted @ 2012-03-04 02:46 therockthe 阅读(113) 评论(0) 推荐(0) 编辑
摘要:浅谈.NET下的多线程和并行计算(一)前言浅谈.NET下的多线程和并行计算(二)线程基本知识浅谈.NET下的多线程和并行计算(三)线程同步基础上浅谈.NET下的多线程和并行计算(四)线程同步基础下浅谈.NET下的多线程和并行计算(五)线程池基础上浅谈.NET下的多线程和并行计算(六)线程池基础下浅谈.NET下的多线程和并行计算(七)基于多线程的基本组件浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础上浅谈.NET下的多线程和并行计算(九)Winform中多线程编程基础下浅谈.NET下的多线程和并行计算(十).NET异步编程模型基础上浅谈.NET下的多线程和并行计算(十一). 阅读全文
posted @ 2012-03-04 01:03 therockthe 阅读(161) 评论(0) 推荐(0) 编辑
摘要:蛙蛙推荐:改进同步等待的网络服务端应用摘要:服务端收到客户端的请求,如果该请求的处理依赖另一个服务,而且客户端要求同步返回结果,一般得把请求的线程等待一个信号,等请求处理完毕再发送一个信号,给客户端返回结果,但如果这样的同步等待请求并发量很大的话,会很快耗费完线程池线程。思路:ThreadPool的静态方法RegisterWaitForSingleObject是专门解决这个问题的,它可以等待一个等待句柄,在这个等待句柄收到信号后执行一个回调方法,从而解决了利用一个单独的线程去等待信号的问题,减少了空闲的线程。为了演示这个场景,我们用HttpListener类来创建一个网络服务端,收到客户端的请 阅读全文
posted @ 2012-03-04 00:40 therockthe 阅读(233) 评论(0) 推荐(0) 编辑
摘要:其实很简单用ThreadPool.RegisterWaitForSingleObject方法注册一个定时检查线程池的方法,在检查线程的方法内调用ThreadPool.GetAvailableThreads与ThreadPool.GetMaxThreads并比较两个方法返回的值是不是相等,相等表示线池内所有的线程已经完成.//每秒检次一次线程池的状态RegisteredWaitHandlerhw=ThreadPool.RegisterWaitForSingleObject(AutoResetEvent(false),this.CheckThreadPool,null,1000,false); . 阅读全文
posted @ 2012-03-04 00:01 therockthe 阅读(244) 评论(0) 推荐(0) 编辑
摘要:不管在哪种平台领域,计时器对象在日常开发中有着相当重要的地位。在.NET中,如果平常你不是特别注意的话,那你肯定不会发现,在.NET Framework中竟然存在三个Timer类型,分别在:System.TimersSystem.ThreadingSystem.Windows.Forms三个不同的命名空间下。(这里我们还暂且不算ASP.NET AJAX中新的那个Timer,这个Timer是用于客户端的计时器对象。)那么我相信很多人会不解,都是定时器的功能,为什么还要定义这么多不同的Timer类型呢?抛开其在使用上的细微不同,我们这里就根据MSDN对这三种不同Timer的描述来作一个比较:Sys 阅读全文
posted @ 2012-03-03 23:52 therockthe 阅读(180) 评论(0) 推荐(0) 编辑
摘要:用U盘装系统装Win7已经不是什么新鲜事,网上也有一大堆U盘装系统教程……教程虽多,但大多良莠不齐,笔者希望用真实案例,一步一步教大家学会用户U盘装系统,懂了怎么用U盘安装Win7,一通百通,无师自通也能学会用U盘安装XP、Vista、2008、甚至还没正式发布的Win8! 安装Windows系统,何须再用光盘?一个U盘即可解决所有的系统安装问题!下面是详细的用U盘装Win7系统教程,希望可以帮到大家。 用U盘安装系统教程分为四大步骤 第一:制作一个可以支持U盘启动的 Win7 PE 启动盘 第二:在笔记本/台式电脑里设置U盘启动 第三:用虚拟光驱加载Win7镜像 第四:用Wi... 阅读全文
posted @ 2012-03-03 16:22 therockthe 阅读(306) 评论(0) 推荐(0) 编辑
摘要:最近很多人想要安装 Windows7 ,下载回去后的ISO镜像文件很多人都是使用 Nero 或 IMGBurn 等工具刻录成光盘来安装的。但实际上,不需刻盘安装Win7的方法还是有不少的。例如使用 Daemon Tools 等虚拟光驱软件直接通过硬盘来安装。还有一个方法就是自己制作一个Win7安装U盘,用优盘装Win7也是相当的cool哟!携带方便而且速度快~ 过去想将Windows7光盘ISO文件转为USB优盘启动要手工操作很多步骤,对新手来说有一定的难度。最近微软发布了一款傻瓜型的自动转换工具 Windows7 USB/DVD Download Tool 则大大方便了这种操作过程。你只.. 阅读全文
posted @ 2012-03-03 16:16 therockthe 阅读(249) 评论(0) 推荐(0) 编辑
摘要:Win8客户预览版怎么安装?Win8安装教程跟Win7安装教程几乎一样,因此安装Win8的方法多达10多种也不足为其!笔者在此介绍成功率最高的那一种方法——用U盘进入WinPE来安装Win8(用U盘装Win8)! 笔者介绍的Win8安装教程可能不是最简单的,但绝对是最通用的,可以应用在任何可以安装Win8的电脑上,包括新买的笔记本,包括已经安装好其他系统的电脑!反正,只要你的电脑支持U盘启动,就能用这种方法来安装Win8!在笔者看来,这三步走的Win8安装方法成功率就算没有100%也有99.999%。闲话少说,请大家直接看详尽的Win8安装图文教程吧! Win8安装教程步骤分解 Wi... 阅读全文
posted @ 2012-03-03 15:59 therockthe 阅读(190) 评论(0) 推荐(0) 编辑
摘要:Framework为我们提供了三个加锁的机制,分别是Monitor类、Lock关 键字和Mutex类。 总体而言,lock和monitor可以锁定对象,也可以锁定函数;而mutex一般用于锁定函数,并保证不同线程间同步调用函数,而不会受线程优先级影响。使用lock和monitor对象锁定对象时(即在对象外部锁定,或者在对象中的函数被调用的地方锁定对象),可以保证该对象一次只被一个线程所访问,但前提是:多个线程所锁定的对象必须是同一个对象,因此这种情况下应该定义一个全局的对象;锁定函数时,即在对象中的函数内部加锁,也可以保证该函数一次只被一个线程所访问,但前提也是各个线程访问的是同一个对象的.. 阅读全文
posted @ 2012-03-02 19:25 therockthe 阅读(323) 评论(0) 推荐(0) 编辑
摘要:示例很简单,准备5个线程,每个线程同时向控制台输出数字,然后观察输出结果。代码说明:////线程列表private static List<Thread> _threadList; static void Main(string[] args) { Program._threadList = new List<Thread>(); ////附加5个线程 for (int i = 0; i < 5; i++) { Program.AppendThread(); } ////开始执行所有测试线程 Program.ExecuteThread(); ////按任意键退出 阅读全文
posted @ 2012-03-02 19:07 therockthe 阅读(471) 评论(0) 推荐(0) 编辑
摘要:其实并不光是WPF,在WinForm中也会经常遇到这种导致界面假死的现象,在目前,防止假死的方法几乎都是使用线程来进行,比如使用System.ComponentModel.BackgroundWorker,现在还有一种方法是使用线程池ThreadPool.QueueUserWorkItem来防止界面假死,而至于说使用这两个类哪一个更好,其实还是要根据需求的不同而选择更合适的方法。这里只是举一个基本的例子,用来更新UI上的实时数据,而采用ThreadPool.QueueUserWorkItem的方式。 ThreadPool.QueueUserWorkItem((o)=>{for(longi 阅读全文
posted @ 2012-03-02 06:51 therockthe 阅读(817) 评论(0) 推荐(0) 编辑
摘要:最近在学习线程相关的内容,所以把学习过程中的心得记录下来,相信大家常用 ThreadPool.QueueUserWorkItem()或者Thread thd=new Thread(new ThreadStart(test)))但是应该很少人知道用ThreadPool.RegisterWaitForSingleObject(高手除外啦),我也是最近才知道。让我来给各位看官解释一下它的用法吧,首先我们看一下它的原型:CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighligh. 阅读全文
posted @ 2012-03-02 05:31 therockthe 阅读(310) 评论(0) 推荐(0) 编辑
摘要:正文://ThreadPool(线程池)是一个静态类,它没有定义任何的构造方法(),我们只能够使用它的静态方法,这是因为,这是因为ThreadPool是托管线程池,是由CLR管理的。//ThreadPool使用WaitCallback委托,它所要做的工作是在后台进行的。使工作项的排队和运行更容易,可以给工作者线程传递一个状态对象(提供数据)。状态对象是私有的作用域位于线程层,所以不需要进行同步。//ThreadPool目标是为了减除线程的初始化开销,实现并行处理。.NET类库中的ThreadPool是异步IO的基础,比如,在System.Net.Socket中,我们可以使用BeginAccep 阅读全文
posted @ 2012-03-02 04:52 therockthe 阅读(364) 评论(0) 推荐(0) 编辑
摘要:在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法/声明都很类似,那么区别在哪里了?Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送其实,从名字就可以看出一点端倪 ,一个手动,一个自动,这个手动和自动实际指的是在Reset方法的处理上,如下面例子public AutoResetEvent autoevent=new AutoResetEvent(true);public ManualResetEvent manualevent=new ManualResetEvent(true);默认信号都处于发送状态,autoevent.WaitOne() 阅读全文
posted @ 2012-03-02 04:40 therockthe 阅读(232) 评论(0) 推荐(0) 编辑
摘要:C#中使用Monitor类、Lock和Mutex类来同步多线程的执行 在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁,好在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类、Lock关键字和Mutex类。 其中Lock关键词用法比较简单,Monitor类和Lock的用法差不多。这两个都是锁定数据或是锁定被调用的函数。而Mutex则多用于锁定多线程间的同步调用。简单的说,Monitor和Lock多用于锁定被调用端,而Mu. 阅读全文
posted @ 2012-03-02 04:17 therockthe 阅读(178) 评论(0) 推荐(0) 编辑
摘要:转自:http://xhinker.blog.51cto.com/640011/180377/public class WaitHandlerExample { public static AutoResetEvent waitHandler; public static ManualResetEvent manualWaitHandler; public static void ThreadPoolMain() { waitHandler = new AutoResetEvent(false); manualWaitHandler = new ManualResetEvent(false). 阅读全文
posted @ 2012-03-02 04:01 therockthe 阅读(193) 评论(0) 推荐(0) 编辑
摘要:不是线程的非终止状态是事件的非终止状态,AutoResetEvent形象说就像一个水龙头一样,当你关闭水龙头,状态就是关闭(终止状态),所有的水都在里面等待流出来,当水龙头打开,就发送一个事件说里面的水可以出来了,这时就是非终止状态,一般是用来同步访问资源AutoResetEvent类的对象,如ManualResetEvent对象一样,大家可以把它简单地理解为一个信号灯,使用AutoResetEvent.Set()方法可以设置它为有信号状态,而使用AutoResetEvent.Reset()方法把它设置为无信号状态。这里用它的有信号状态来表示一个线程的结束。以一个例子(以线程)来说:控制多个线 阅读全文
posted @ 2012-03-02 04:00 therockthe 阅读(311) 评论(0) 推荐(0) 编辑
摘要:编写桌面程序的时候当遇到长时间的方法调用时,大家都会遇到主线程被挂起、界面无响应的状况。线程操作是解决类似问题的绝佳手段,但对于刚接触线程的朋友来讲编写和调试多线程程序是非常痛苦的,尤其是在VC的MFC下,没有一定的C++基础,很难做出专业的多线程程序来。 幸好,.Net框架为我们提供了非常简便的方法和机制来创建多线程程序,譬如:Thread、线程池、异步方法调用以及BackgroundWorker!Thread和BackgroundWorker在MSDN中关于这两个类都有非常详细的解释以及丰富的示例,在后续的文章里我们会利用非常实际的示例程序来进行实战。在这里我们首先讨论异步方法调用。 所. 阅读全文
posted @ 2012-03-01 18:20 therockthe 阅读(310) 评论(0) 推荐(0) 编辑
摘要:在上一篇博文中,我们已经实现了简单的异步方法调用,但是还有两个关键问题无法解决,1、我们无法知道异步方法何时执行完毕;2、必须控制主线程上的button对象的enabled属性,也就是说在非阻塞模式下不能对同一个button反复的单击。 我们注意到BeginInvoke方法所接受的另外两个可选参数,第一个参数就是我们所感兴趣的,它接受类型为AsyncCallBack类型的方法 - CallBack1!当异步方法调用结束时会自动调用这个回调方法。回调方法实际上是在Win32开发时代很多Windows API函数经常用到的,某些API函数需要传递一个回调函数的地址,当系统API执行完毕后自动执行. 阅读全文
posted @ 2012-03-01 18:20 therockthe 阅读(314) 评论(0) 推荐(0) 编辑
摘要:本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助。原英文文献可以在codeproject中搜索到。介绍 这篇文章将介绍异步调用的实现机制及如何调用异步方法。大多数.NET开发者在经过delegate、Thread、AsynchronousInvocation之后,通常都会对以上概念产生混淆及误用。实际上,以上概念是.NET2.0版本中对并行编程的核心支持,基于概念上的错误认识有可能导致在实际的编程中,无法利用异步调用的特性优化我们的程序,例如大数据量加载引起的窗体”假死”。事实上这并不是一个困难的. 阅读全文
posted @ 2012-03-01 18:10 therockthe 阅读(700) 评论(0) 推荐(0) 编辑
摘要:自己写了一个多线程的工作队列,能够实现对队列中对象的自动处理。多线程添加元素到队列中,队列根据绑定 的事件进行自动处理,可以设置WorkSequential属性来实现对队列处理的单线程(严格顺序处理)或者多线程处理(循序出队,但是多线程处理,不保证对队列元素的处理顺利)的选择。源码:代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/***********多线程的工作队列*************** * 此工作队列保证线程安全性 * * 阅读全文
posted @ 2012-03-01 17:45 therockthe 阅读(342) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示