浅谈.NETfarmwork

    13年写的一篇文章,也是这么多年唯一一篇,现在公开出来,希望能对刚入门或者刚工作不久的同学有些帮助:

          时光飞逝,转眼间参加工作已经很久了。随着时间的推移,让我对..NETfarmwork 又有了一些新的认识。首先我想谈的是堆栈关系,这个知识点很基础,但是如果你不深入的理解它,对很多性能照成的瓶颈问题都不能有一个根本的认识。
           C#对象分两种类型,一种是基于栈的值类型,这种类型不会在堆中分配空间,只会在栈上定义并存放值(主要这里是存放值,如果你要存放栈的地址需要相应的加上“ref”关键字),这也就意味着这种类型永远不可能是null值的情况,如果你想你想对一个值类型赋一个null值,c#会出现一个编译错误。如果像强制的给一个值类型对象赋予一个NULL那么我们必须使用"?"关键字来定义相应的值类型.接下来是引用类型,这种类型也有人称作对象类型。这种类型首先必须在栈上进行定义,然后再在对应的堆上分配空间,栈上所存储的值,其实就是堆的地址。如果细心的人会发现当处于runtime阶段的时候(两种阶段一种编译时,一种运行时),所有的 nullreferenceexception都是基于引用类型未分配堆空间。也就是很多人所说的没有 实例化,当然我们了解问题得从本质上去了解,而不是简单的没有实例化。这里有个值得注意的地方,结构体是值类型,细心的可能会发现c#中许多值类型的关键字都是使用结构体来定义的。
        有了这个概念对很多.NET的基本问题都能有一个深入的认识,接下来我想讲的是委托,事件,其实从本质来讲委托就是用来封装方法的。结合上面所讲的堆栈关系,理解起来就很简单了。从运行的形态来讲事件大概分为两种,一种同步事件,一种异步事件,同步事件顾名思义,简单的对一个方法进行封装,然后使用使用事件对这个方法进行一些调用,等返回结果了之后再对下面的操作。前提是要等方法执行完成之后才会对下面的内容执行操作。异步事件是多线程的范畴之内了,至少我是这么认为的,理解异步事件必须对多线程有一个根本的认识,其实线程出现最多的问题大部分是资源争抢带来的死锁问题,这将倒置整个应用程序处于一个瘫痪状态,所以说多线程带来的问题是不容忽视的,这在web应用程序上也是经常发生的事情。所以小心处理多线程是非常必要的,若非把握非常到位,尽量不要使用多线程。事件从类型上还可以分为 强事件,弱事件,弱事件通常会产生事件冒泡。对于很多内存泄露的问题,大部分人都会选择弱事件来处理。
        接下来是接口,泛型,反射,特性。这一概念的引入,你必须拥有动态编程的思想。其实这一概念的引入,个人认为是弥补很多静态编程的不足,充分的减少编码的数量,更多的注重于编码的质量。这些东西如果要真的全部讲出来,每一个都要讲很长一段时间。
        接下来是 asp.net,asp.net的东西很多很杂,个人觉得比较重要的是自定义控件这一块,有兴趣的可以研究一下,这对充分认识asp.net的原理比如 页面的生命周期,页面的呈现过程,页面事件的处理机制的根本方式。还有就是充分要理解http请求协议,这是web应用程序 最关键的部分。充分理解http请求,就可以随心所欲的自定义http处理程序,以及异步调用此程序。结合自定义控件可以写出自定义的ajax控件,以及其他你需要的控件。asp.net本身还有许多安全问题,asp.net安全管理机制,对这些都有一些很好的诠释。还有就是asp.net mvc,图形,视图,控制器之间的协调作用,以及如何利用路由实现这一方式(这些都是一些根本的理解,需要深入的理解还需要深入的去学习)。asp.net silvlieght 这一部分是如何做到美化界面(还没有研究过)。asp.net缓存技术提高整体系统的性能起着不可或缺的地位。
       .NET farmwork,存在着很多的通信技术 从基于 soap协议的webservice,基于TCP/IP协议的.NET remoting, message queue。当然这些都已经被 wcf所包含,wcf本质是通过契约来建立通信的,通过备置文件来配置相应的传输协议,以及wcf的寄主,以及wcf的契约,这些也可以通过编程的方式来实现。wcf的通信可以分为三种模式,请求等待, 单工,双工,通过相应特性的配置(servicebehavier)可以实现异步通信,这里就不详细介绍了。和webservice一样,客户端可以使用代理类的方式来传输数据,不一样的是 webservices 是基于http协议的(本质还是序列化xml数据),并且webservice必须依附在web进程上,任何一个进程都可以寄托wcf服务。而 wcf的元数据wsdl也可以通过相应的xml.XSD(xml架构)配合webclient这一代理类解析出来。
     基于业务的.NET workflow近年来在市场上运用很广泛,很多企业的审批流都是基于微软workflow来实现的,大致上workflow可以分为两种方式 sequential workflow ,state Machine workflow(顺序工作流 ,状态机制工作流),大致学习了一下 微软的工作流也是通过事件驱动的方式来实现的,几乎所有的工作流都是异步的(这一部分还没有实践过)。
   .NET报表技术,reportingservices(不说了..)。   

原文地址:https://www.cnblogs.com/pettergu/p/9287844.html