摘要:
平时都用word中的"Blog post"来写博客,然后Publish到博客园上。文章中的标题都是用Heading1-Heading4,所以在word中可以看到一个很清晰的标题目录,浏览、跳转起来很方便,如下图。所以,就想在博客中也加入一个类似的标题目录,一是可以一眼看到博客的目录结构,二是可以方便... 阅读全文
摘要:
IronPython是一个.NET平台上的Python实现,包括了完整的编译器、执行引擎与运行时支持,能够与.NET已有的库无缝整合到一起。IronPython已经很好的集成到了.NET framework中,所以Ironpython和C#的交互也就变得很简单了。下面就通过一些简单的例子来看看Iro... 阅读全文
摘要:
在C#中,委托类型是一个类型安全的、面向对象的函数指针。当我们通过delegate关键字定义一个委托类型后,编译器会给委托类型生成三个方法:Invoke、BeginInvoke和EndInvoke。例如对于下面委托类型,可以通过ILSpy查看编译器生成的三个方法。private delegate i... 阅读全文
摘要:
上一篇介绍了同步事件EventWaitHandle,以及它的两个子类型AutoResetEvent和ManualResetEvent。下面接着介绍WaitHandle的另外两个子类型Mutex和Semaphore。互斥体Mutex互斥体Mutex也是Windows用来进行线程同步的内核对象。当两个或... 阅读全文
摘要:
上一篇介绍了通过lock关键字和Monitor类型进行线程同步,本篇中就介绍一下通过同步句柄进行线程同步。在Windows系统中,可以使用内核对象进行线程同步,内核对象由系统创建并维护。内核对象为内核所拥有,所以不同进程可以访问同一个内核对象, 如进程、线程、事件、信号量、互斥量等都是内核对象。其中... 阅读全文
摘要:
在多线程代码中,多个线程可能会访问一些公共的资源(变量、方法逻辑等等),这些公共资源称为临界区(共享区);临界区的资源是不安全,所以需要通过线程同步对多个访问临界区的线程进行控制。同样,有些时候我们需要多个线程按照特定的顺序执行,这时候,我们也需要进行线程同步。下面,我们就看看C#中通过lock和M... 阅读全文
摘要:
前面一篇文章介绍了垃圾回收的基本工作原理,垃圾回收器并不是可以管理内存中的所有资源。对于所有的托管资源都将有.NET垃圾回收机制来释放,但是,对于一些非托管资源,我们就需要自己编写代码来清理这类资源了。其实在C#开发中,大部分资源都可以通过.NET垃圾回收机制进行回收,只用当我们使用非托管资源(原始... 阅读全文
摘要:
在开发.NET程序过程中,由于CLR中的垃圾回收(garbage collection)机制会管理已分配的对象,所以程序员就可以不用关注对象什么时候释放内存空间了。但是,了解垃圾回收机制还是很有必要的,下面我们就看看.NET垃圾回收机制的相关内容。创建对象在C#中,我们可以通过new关键字创建一个引... 阅读全文
摘要:
.NET编译器的任务之一就是为所有定义和引用的类型生成元数据描述。除了程序集中标准的元数据外,.NET平台还支持特定(attribute)把更多的元数据嵌入到程序集中。.NET特性扩展了抽象的System.Attribute基类,.NET中有很多预定义的特性,例如:[DllImport]、[Obso... 阅读全文
摘要:
使用元数据完整地描述类型(类、接口、结构、枚举和委托)的能力是.NET平台的一个关键要素,像对象序列化、WCF等技术都需要在运行时通过元数据来发现类型格式。通过ildasm.exe这个工具,我们可以查看一个程序集的元数据(Ctrl+M组合键)。在.NET中,利用反射(reflection)服务,我们... 阅读全文