摘要: 感觉很详细,比较容易理解,虽然自己还是没坚持全部看完,但还是值得和大家分享! 在32位的Windows操作系统中,每个进程都可以使用4GB的内存,这得益于虚拟寻址技术,在这4GB的内存中存储着可执行代码、代码加载的DLL和程序运行的所有变量,在C#中,虚拟内存中有个两个存储变量的区域,一个称为堆栈,一个称为托管堆,托管堆的出现是.NET不同于其他语言的地方,堆栈存储值类型数据,而托管堆存储引用类型如类、对象,并受垃圾收集器的控制和管理。在堆栈中,一旦变量超出使用范围,其使用的内存空间会被其他变量重新使用,这时其空间中存储的值将被其他变量覆盖而不复存在,但有时候我们希望这些值仍然存在,这就需要托 阅读全文
posted @ 2011-07-06 12:43 koll 阅读(430) 评论(1) 推荐(0)
摘要: 相同点:都是定时执行任务的计时器,都可以使用。 不同点:Timer运行在非UI 线程,如果Timer需要更新UI的时候,需要调用 Invoke或者 BeginInvoke DispatcherTimer运行在UI 线程,处理的 Dispatcher 队列中的计时器,可以直接更新UI WPF 应用程序启动时具有两个线程:一个用于处理呈现,另一个用于管理 UI。 呈现线程实际上隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。 大多数应用程序只使用一个 UI 线程,但在某些情况下,最好使用多个线程。比如大数据量的处理放到后台线程中。 UI 线程在一个名为 Disp. 阅读全文
posted @ 2011-06-24 09:59 koll 阅读(401) 评论(0) 推荐(0)
摘要: Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates有两个主要问题:1.什么是the calling thread? 2.什么是a thread? 首先来看一下有关的概念: 我们执行一个.exe文件实际上就是开启了一个进程,同时开启了至少一个线程,但是真正干活的是线程,就好比一个Team有好几个人,但是真正干活的是人不是Team. 具体到代码来说,以Console Application为例:程序Test.exe从Main函数开始运行,实际上是有一个线程在执行Main函数,我们称作MainTh 阅读全文
posted @ 2011-06-21 23:54 koll 阅读(899) 评论(2) 推荐(3)
摘要: .net中的System.Threading命名空间的Interlocked类可以为多个线程共享的变量提供原子操作。 经验显示,那些需要在多线程下被保护的资源通常是整型的,而这些被共享的整型值最常见的操作就是增加、减少。Interlocked类提供了一个专门的机制用于完成这些特定的操作。 下面的例子是一个没有使用Interlocked类的操作: class Program { static long counter = 1; static void Main(string[] args) { System.Threading.Thread t1 = new System.Threading.T 阅读全文
posted @ 2011-06-21 23:41 koll 阅读(1893) 评论(1) 推荐(2)
摘要: lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。但有一点应该注意,msdn上解释说,应该避免对public类型的锁定,否则实例将超出代码的控制范围,下面例子将对此做出解释:public void Method2() { lock (this) { System.Windows.Forms.MessageBox.Show("Method2 End"); } } 如果在同一个Class1的实例中,该Method2能够互斥的执行。但是如果是2个Class1的实例分别来执行Method 阅读全文
posted @ 2011-06-20 23:42 koll 阅读(700) 评论(0) 推荐(1)
摘要: 反射的概述反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码。反射的作用:1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现 有对象中获取类型2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。3. 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。应用要点:1. 现实应用程序中很少 阅读全文
posted @ 2011-06-15 16:18 koll 阅读(424) 评论(1) 推荐(1)