【Windows】线程漫谈——.NET线程同步之Event和Mutex
摘要:本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等本篇介绍与内核对象同步相关的Event对象和Mutex对象AutoResetEvent和ManualResetEvent同步事件有两种:AutoResetEvent和 ManualResetEvent。主要用户线程之间的通知,实现同步。无论是哪种,实际上是每个Event对象关联了一个事件内核对象。在【Windows】线程漫谈——线程同步之等待函数和事件内核对象中,详细介绍了事件内核对象和等待函数。.NET这里的两个版本是对它们的封装。下面简单回顾一下事件内核对象:事件内核对象有两种状态:触发状态、非
阅读全文
【Windows】线程漫谈——.NET线程同步之Interlocked和ReadWrite锁
摘要:摘要: 本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。这篇来说说静态的Interlocked类和ReadWrite锁.NET中的InterlockedInterlocked的系列方法提供了对简单类型的原子操作(不会被打断的操作),因此这也是一种多线程共享变量,防止冲突争用的方法。比如下面的方法作用是以原子的方式递增整数i:int i = 0 ;Interlocked.Increment( ref i);除此之外还包括Add、Exchange、CompareExchange、Decrement、Read和其中的某些泛型版本。如果看官使用过win
阅读全文
【Windows】线程漫谈——.NET线程同步之Monitor和lock
摘要:摘要: 本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。从这篇开始,在线程同步的方法上,开始在.NET平台上做个总结,同时对比Windows原生的API方法。你可以发现其中的联系。.NET中的Monitor和lock相信很多看官早已对此十分熟悉了。本文作为总结性的文章,有一些篇幅将对比Monitor和关键段的关系。由于lock就是Monitor,所以先从Monitor说起,通常Monitor是像下面这样使用的:Monitor.Entry(lockObj);try{ // lockObj的同步区}catch(Exception e){ ...
阅读全文
深入理解ASP.NET MVC(10)
摘要:系列目录前言Model是MVC强大的机制之一,它是MVC框架中客户端和服务端数据交互的核心机制。深入的理解Model有助于我们自己在MVC的基础上扩展,也有助于我们创造出更具复用意义的软件模块。主要包含以下议题: Templated view helpers:根据Model生成Html控件元素 Model Binding:自动映射和解析用户提交的数据 Integrating validation:集成客户端认证我们知道ASP.NET web应用程序的数据交互其实就是客户端表单数据和.NET对象(Model)之间的转化。下图说明了这个问题: 在MVC中,众多HTML Helper负责将Mo
阅读全文
深入理解ASP.NET MVC(9)
摘要:系列目录异步处理请求的意义大伙儿都知道,ASP.NET通过线程池处理请求,对于每个请求从线程池中请求一个可用的线程来处理请求,当请求处理完毕之后,线程资源将被归还到线程池。然而,线程池中的线程是互斥资源,当网站在同一时刻的请求量达到一定数量的话,必然会导致这种资源不够耗尽,新来的请求只能等待有新的线程归还才能被处理。当然这不是最糟糕的,通常每个请求只需要很短的时间就可以了,新的请求不会等待太长的时间,但是,如果处理请求需要花费较长的时间呢?比如一次耗时的数据库查询、一次外部web service请求这类的IO操作。注意这里特指的IO操作,指的是不会占用ASP.NET线程池线程的,甚至不占用本机
阅读全文
ASP.NET MVC 源码分析——巧用Aggregate和委托构造递归链
摘要:系列目录在研究ASP.NET MVC2中IActionFilter和IResultFilter的执行逻辑的时候看到下面四个方法(你可以在ControllerActionInvoker.cs中找到它们)InvokeActionMethodWithFilters InvokeActionMethodFilter InvokeActionResultWithFilters InvokeActionResultFilter 事实上前两个和后两个的实现和逻辑几乎差不多,只不过一组处理IActionFilter,一组处理IResultFilter,这里我只讨论一下前两组。在阅读本文前,建议您搞清楚.NET
阅读全文
深入理解ASP.NET MVC(8)
摘要:系列目录过滤器上下文参数前一节提到了四种MVC内建过滤器,它们无一例外都在关键的方法中提供了叫filterContext的参数,尽管它们各自类型不同,但是都继承自ControllerContext。 其中一个共同的重要属性是:Result是唯一通知MVC框架当前Filter执行结果的媒介,也就是说MVC框架总是在必要的时候判断filterContext.Result,如果Result不为空就表示可...
阅读全文
深入理解ASP.NET MVC(7)
摘要:系列目录Action的定位再次回到Controller的ExecuteCore方法,回到action调用的入口:这里的ActionInvoker是个IActionInvoke,它无疑是负责了所有action的调用逻辑,MVC中默认实现这个接口的是ControllerActionInvoke。可以想象ControllerActionInvoke面临的第一个问题是如何找到与actionName对应的a...
阅读全文
深入理解ASP.NET MVC(6)
摘要:系列目录Action全局观在上一篇最后,我们进行到了Action调用的“门口”:在深入研究调用过程的细节前,先有一个总体的认识是很有帮助的。InvokeAction方法大致是按照这样的顺序进行的: 查找action:MVC内部查找action的方法似乎有点复杂,涉及到一个ActionDescriptor的东西,但是原理上是通过反射,在以后的文章中会有所涉及。验证和过滤:众所...
阅读全文
深入理解ASP.NET MVC(5)
摘要:系列目录回顾系列的前4节深入剖析了ASP.NET URL路由机制,以及MVC在此基础上是如何实现Areas机制的,同时涉及到inbound和outbound很多细节部分。第2节中提到MvcRouteHandler是MVC框架的入口,这节开始,从MvcRouteHandler往下说开去。Controller的创建过程:Builder和FactoryMvcRouteHandler的实现仅仅是通过Get...
阅读全文
深入理解ASP.NET MVC(4)
摘要:系列目录DataTokens和Areas机制到目前为止Route对象只剩下DataTokens属性没有涉及,事实上这个Areas机制的核心。DataTokens实际上也是一个RouteValueDictionary,在用MapRoute方法构造在Route构造的时候,可以传一个namespaces字符串数组,这个参数会构造成Route对象的DataTokens["Namespaces"],它的值将...
阅读全文
深入理解ASP.NET MVC(3)
摘要:系列目录URL是如何通过路由表生成的(outbound) 通常我们被推荐在view设计时使用Html.ActionLink(…)产生链接,这样做的优势就是,url可以根据路由表生成。路由机制的另一个职责便是根据路由表生成url,而不是由我们手动编写。接下来深入分析一下其原理。类似Html.ActionLink的方法,最终都将通过查询路由表来生成url,跟inbound一样,路由表总是...
阅读全文
深入理解ASP.NET MVC(2)
摘要:系列目录请求是如何进入MVC框架的(inbound)当一个URL请求到来时,系统调用一个注册的IHttpModules:UrlRoutingModule,它将完成如下工作:一、在RouteTable.Route中从第一个Route开始查找第一个匹配当前URL的Route。需要同时满足下面的条件,才能算匹配:1.URL匹配Route属性中Url的模型;2.所有{}中定义的参数都可以在请求的URL中找...
阅读全文
深入理解ASP.NET MVC(1)
摘要:系列目录 ASP.NET MVC请求的服务过程下图是书中的截图,表述了一次通常的ASP.NET MVC请求的服务过程: 从图中可以初步看出一个HttpRequest是如何被ASP.NET和ASP.NET MVC框架执行的:经过IIS和ASP.NET处理后,Core Routing会首先根据URL匹配物理路径上的文件,如果不能匹配则由核心路由模块执行路由,路由被匹配后,MvcRouteHandler...
阅读全文
深入理解ASP.NET MVC(目录)
摘要:系列前言学ASP.NET MVC2有一段时间了,也针对性的做了个练习。感觉这个框架还是不错的,所以决定要深入系统的学习一下。看到这样一本书:作者博客:http://blog.stevensanderson.com/csdn下载地址(免积分)我不得不说这本书写的很好,尤其是通俗的语句和循序渐进的风格,很容易吸引读者往下看,引导读者一步步理解讲述的内容。书中既有适合初学者练习的例子,也有让有一定基础的读者深入学习的章节。目前我还在读这本书。由于书中所讲述的内容还是比较多的(700页),所以我打算在博客上写个系列的读书笔记,以加深自己的理解,并分享经验。另外这个系列大部分的内容是讨论ASP.NET
阅读全文
ASP.NET MVC的全球化方案
摘要:由于项目需要最近在学习ASP.NET MVC。在实践中,网站要支持多语言,需要全球化。在MVC下我实现了一个全球化框架,在这里与各位分享一下,不足之处也请各位看官指教。让URL支持全球化经常上微软网站的朋友可能很熟悉类似包含..\zh-cn\..、..\en-us\..的url形式,这就是本文要使用的全球化方案。当然还有使用QueryString传递参数的方案,基本思路我想是类似的。由于MVC天生...
阅读全文
字符编码总结
摘要:最近被字符编码问题搞的很头疼,很多编码方式可谓“耳熟不能详”,GB2312、ANSI、UTF-8、Unicode…。于是静下心来,好好学习一番。参考资料:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.htmlhttp://www.regexlab.com/zh/encoding.h...
阅读全文
.NET多线程的探讨
摘要:本文开始总结.NET下的多种多线程机制,不断更新中,往各位补充。Invoke机制最近在实验一个webservice时候,想到了要用异步机制,于是好好研究了一下多线程和Invoke机制,这里写点小小的心得,如有不妥,请各位指教。我们往往会遇到这样的需求:有一个十分耗时间的工作(比如一个WebSerive的请求),我们不希望它阻塞现有的UI线程(因为这样会导致界面假死),而是希望它在另外一个线程里...
阅读全文