摘要:
一. 简介 该章节,可以说是一个简单轻松的章节,只要你对Expression表达式树、EF的基本使用、泛型有所了解,那么本章节实质上就是一个非常简单的封装章节,便于我们快捷开发。 PS:在该章节对于EF的上下文怎么处理,怎么来的,不做介绍,在后续的框架篇将详细介绍,下面的EF上下文,将直接使用db代 阅读全文
摘要:
一. 理解并发机制 1. 什么是并发,并发与多线程有什么关系? ①. 先从广义上来说,或者从实际场景上来说. 高并发通常是海量用户同时访问(比如:12306买票、淘宝的双十一抢购),如果把一个用户看做一个线程的话那么并发可以理解成多线程同时访问,高并发即海量线程同时访问。 (ps:我们在这里模拟高并 阅读全文
摘要:
一. 背景 二. 技术选型与比较 三. 由浅入深系列章节 第一节:框架前期准备篇之Log4net详解 第二节:框架前期准备篇之AutoFac常用用法总结 第三节:框架前期准备篇之利用Newtonsoft.Json改造MVC默认的JsonRestult 第四节:框架前期准备篇之进程外Session的两 阅读全文
摘要:
一. 简介 1. 背景: 虽然前面EF的扩展插件Z.EntityFramework.Extensions,性能很快,而且也很方便,但是该插件要收费,使用免费版本的话,需要定期更新,如果不更新,将失效,非常麻烦,这个时候SqlBulkCopy类既免费又高效,显得非常合适了。 2. 使用步骤: ①. 引 阅读全文
摘要:
一. 四大并发集合类 背景:我们目前使用的所有集合都是线程不安全的 。 A. ConcurrentBag:就是利用线程槽来分摊Bag中的所有数据,链表的头插法,0代表移除最后一个插入的值. (等价于同步中的List) B. ConcurrentStack:线程安全的Stack是使用Interlock 阅读全文
摘要:
一. 监视锁(Monitor和lock) 1. Monitor类,限定线程个数的一把锁,两个核心方法: Enter:锁住某个资源。 Exit:退出某一个资源。 测试案例:开启5个线程同时对一个变量进行自增操作,结果变量有序的输出,说明该锁同时只允许一个线程访问。 但是写法很麻烦,每次都要try-ca 阅读全文
摘要:
一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案。 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④:读写锁 ⑤:动态锁 二. 事件锁 事件锁包括: A. 自动事件锁(AutoResetEvent) 使用场景:可以用此锁实现多线程环境 阅读全文
摘要:
一. 锁机制的背景介绍 本章节,将结合多线程来介绍锁机制, 那么问题来了,什么是锁呢? 为什么需要锁? 为什么要结合多线程来介绍锁呢?锁的使用场景又是什么呢? DotNet中又有哪些锁呢? 在接下来的几个章节中,将陆续解答这些问题。 PS: 多个线程对一个共享资源进行使用的时候,会出问题, 比如实际 阅读全文
摘要:
一. async和await简介 PS:简介 1. async和await这两个关键字是为了简化异步编程模型而诞生的,使的异步编程跟简洁,它本身并不创建新线程,但在该方法内部开启多线程,则另算。 2. 这两个关键字适用于处理一些文件IO操作。 3. 好处:代码简介,把异步的代码写成了同步的形式,提高 阅读全文
摘要:
一. 并行编程 1. 区分串行编程和串行编程 ①. 串行编程:所谓的串行编程就是单线程的作用下,按顺序执行。(典型代表for循环 下面例子从1-100按顺序执行) ②. 并行编程:充分利用多核cpu的优势,同时开启多个线程并行执行。(典型代表Parallel.For循环 下面例子从1-100无序执行 阅读全文
摘要:
一. Task的各种返回值-Task<TResult> PS: 在前面章节,我们介绍了Task类开启线程、线程等待、线程延续的方式,但我们并没有关注这些方式的返回值,其实他们都是有返回值的Task<TResult>,然后可以通过Task的实例调用Result属性来获取这个返回值。 下面我们分三类来介 阅读全文
摘要:
一. 传统的线程取消 所谓的线程取消,就是线程正在执行的过程中取消线程任务。 传统的线程取消,是通过一个变量来控制,但是这种方式,在release模式下,被优化从cpu高速缓存中读取,而不是从内存中读取,会造成主线程无法执行这一个bug。 PS: 通过上面的代码看可以看出来,传统模式的线程取消,在排 阅读全文
摘要:
一. 整体说明 揭秘: 该章节的性质和上一个章节类似,也是一个扩展的章节,主要来研究Task类下的实例方法ContinueWith中的参数TaskContinuationOptions。 通过F12查看TaskContinuationOptions的源码,知道主要有这么几个参数: ①. LazyCa 阅读全文
摘要:
一. 整体说明 揭秘: 通过F12查看Task类的源码(详见下面的截图),发现Task类的构造函数有有一个参数为:TaskCreationOptions类型,本章节可以算作是一个扩展章节,主要就来研究TaskCreationOptions类的作用。 该类主要用来处理父子线程之间的关系,重要的几个参数 阅读全文
摘要:
一. 背景 揭秘: 在前面的章节介绍过,Task出现之前,微软的多线程处理方式有:Thread→ThreadPool→委托的异步调用,虽然也可以基本业务需要的多线程场景,但它们在多个线程的等待处理方面、资源占用方面、线程延续和阻塞方面、线程的取消方面等都显得比较笨拙,在面对复杂的业务场景下,显得有点 阅读全文
摘要:
一. ThreadPool简介 ThreadPool简介:ThreadPool是一个线程池,当你需要开启n个线程时候,只需把这个指令抛给线程池,它将自动分配线程进行处理,它诞生于.Net 2.0时代。 ThreadPool与Thread的区别: ①:Thread每开启一个异步任务,就需要使用一个Th 阅读全文
摘要:
一. Thread及其五大方法 Thread是.Net最早的多线程处理方式,它出现在.Net1.0时代,虽然现在已逐渐被微软所抛弃,微软强烈推荐使用Task(后面章节介绍),但从多线程完整性的角度上来说,我们有必要了解下N年前多线程的是怎么处理的,以便体会.Net体系中多线程处理方式的进化。 Thr 阅读全文
摘要:
一. 再谈委托 1. 委托是一个关键字为delegate的自定义类型,通过委托可以把方法以参数的形式传递给另外一个方法,实现插件式的开发模式; 同时调用委托的时候,委托所包含的所有方法都会被实现。 2. 委托的发展历史:new实例化传递方法→直接等于方法名→delegate匿名方法→省略delega 阅读全文
摘要:
一. 基本认识 1. 简介:HttpContext用于保持单个用户、单个请求的数据,并且数据只在该请求期间保持; 也可以用于保持需要在不同的HttpModules和HttpHandlers之间传递的值; 也可以用于保持某个完整请求的相应信息。 2. 五大核心对象包括:Response、Request 阅读全文
摘要:
一. 基于RouteBase扩展 1. 原理 扩展RouteBase,同样使用的是MVC框架提供的MvcRouteHandler进行处理。 2. 步骤 1. 新建YpfRoute1类,继承RouteBase类型,并覆写里面的两个抽象方法, 在GetRouteData编写业务逻辑,(这里是禁止Chro 阅读全文
摘要:
一. 自定义扩展名 1. 前言 凡是实现了IHttpHandler接口的类均为Handler类,HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET Framework才调用HttpHandler的ProcessRequest方法来对这个HTTP请求 阅读全文
摘要:
一. 删除WebForm视图引擎 在MVC框架中检索视图的顺序为:当前控制器下对应的文件夹的aspx文件→share文件夹aspx文件→当前控制器下对应文件夹的cshtml文件→share文件夹的cshtml文件。 鉴于以上顺序,如果我们使用的MVC5框架中不需要WebForm的视图引擎,可以删除, 阅读全文
摘要:
一. 简介 1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是MVC中特有的一种优化方式。 (当然现在前端也有很多基于node的工作流插件,可以合并压缩混淆js或c 阅读全文
摘要:
一. 简介 写完上一个章节MVC中的常用特性,迫不及待将该系列补全,该章节主要介绍数据批注(也叫:注解)。 一听【数据批注】,好高大上的名字,但仔细一看,它们其实是【System.ComponentModel.DataAnnotations】程序集下的一些特性类,O(∩_∩)O哈哈~,既然是特性,就 阅读全文
摘要:
一. 前世今生 乍眼一看,该标题写的有点煽情,最近也是在不断反思,怎么能把博客写好,让人能读下去,通俗易懂,深入浅出。 接下来几个章节都是围绕框架本身提供特性展开,有MVC程序集提供的,也有其它程序集提供;在本章节将重点介绍几个MVC框架提供的且作用于方法上的特性,并且模仿其源码自定义特性。 其实早 阅读全文
摘要:
。。。 阅读全文
摘要:
一. 背景 提到MVC不得不说MVC中的各种Result,这些高度封装的xxxResult以及在xxxResult再度封装的xxx,大大提高了MVC框架的开发效率。 相信做过MVC开发的朋友都会用到过 return Content("xx"), 给客户端的Ajax请求返值,那么Content内部是怎 阅读全文