<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_精神分裂</title><subtitle type="text">编程博客, http://sunxiunan.com备份</subtitle><id>http://feed.cnblogs.com/blog/u/59845/rss</id><updated>2011-07-26T06:40:27Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/59845/rss"/><entry><id>http://www.cnblogs.com/lua5/archive/2011/07/26/2117208.html</id><title type="text">DotNet程序员面试问题评估</title><summary type="text">欢迎各位Dotnet程序员回答。不需要回答出具体问题，只要标记大致程度即可。1什么是DotNet的CLR? CLR作用是什么？A不知道 B知道很少 C知道一些 D非常了解2 DotNet中如何使用Win32的DLL？（没有reference可以添加）A不知道 B知道很少 C知道一些 D非常了解3 C#使用什么关键字实现可变个数参数(variable number parameters)？A不知道 B知道很少 C知道一些 D非常了解4 C#中的weak reference是什么？用于什么场合？A不知道 B知道很少 C知道一些 D非常了解5 C#中的using dispose模式是什么？用于什么场</summary><published>2011-07-26T06:40:00Z</published><updated>2011-07-26T06:40:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/07/26/2117208.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/07/26/2117208.html"/><content type="html">&lt;p&gt;欢迎各位Dotnet程序员回答。不需要回答出具体问题，只要标记大致程度即可。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;1什么是DotNet的CLR? CLR作用是什么？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;2 DotNet中如何使用Win32的DLL？（没有reference可以添加）&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;3 C#使用什么关键字实现可变个数参数(variable number parameters)？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;4 C#中的weak reference是什么？用于什么场合？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp;B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;5 C#中的using dispose模式是什么？用于什么场合？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;6 C#中Garbage Collection是什么？简介GC的internal工作方式(如果你是微软开发人员，如何实现GC)?&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;7 C#中的关键字as, yield, out/ref, virtual/abstract/override？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp;B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;8 Strong name signature是什么？有什么用？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;9 字符串intern暂留机制是怎么一回事？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;10 Windows平台下多进程通讯方式？越多越好&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;11 Delegate, Event, Action, Func都是什么？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp;B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;12 MVC, MVP, MVVM设计模式？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;13 除了工厂模式和单例模式，列举并且简单介绍你知道的设计模式以及应用场合？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;14 C#中overload和override如何实现？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;15 接口和抽象类有什么区别？都应用在什么场合？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;16 LINQ是什么？写一个简单的LINQ语句？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;17 C# Lambda是什么？写一个简单的lambda?&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;18 C#中class与struct区别？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;19 是否听说过或者了解MEF, Unity, Prism?&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;20 面向对象设计思想/原则有哪些？(SOLID)&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;21 如何实现一个plugin插件可扩展系统？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;22 DotNet中的LinkedList与SortedList有什么不同？内部如何实现？&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;p&gt;23 设计一个字符串类(不能使用类库中的string class)?简要说明关键方法&lt;/p&gt;&lt;p&gt;A不知道 &amp;nbsp;&amp;nbsp;&amp;nbsp; B知道很少&amp;nbsp;&amp;nbsp;&amp;nbsp; C知道一些&amp;nbsp;&amp;nbsp;&amp;nbsp; D非常了解&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/2117208.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/07/26/2117208.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/07/21/2113328.html</id><title type="text">System.Collections.Generic代码阅读笔记LinkedList SortedDictionary SortedList SortedSet</title><summary type="text">代码来自ILSpy分析结果，与实际代码可能有些微出入。手写版http://min.us/mqjnYB从下面可以看到，LinkedList是双向链表，但是SortedList实际上使用的还是数组。而SortedDictionary与SortedSet关系非常紧密。--------------------------------------------------------------------------------------------------------------------LinkedList&lt;T&gt; 通过双向链表这种数据结构实现。关键数据成员：LinkedListN</summary><published>2011-07-21T14:37:00Z</published><updated>2011-07-21T14:37:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/07/21/2113328.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/07/21/2113328.html"/><content type="html">&lt;p&gt;代码来自ILSpy分析结果，与实际代码可能有些微出入。手写版&lt;a title="http://min.us/mqjnYB" href="http://min.us/mqjnYB"&gt;http://min.us/mqjnYB&lt;/a&gt;&lt;/p&gt;&lt;p&gt;从下面可以看到，LinkedList是双向链表，但是SortedList实际上使用的还是数组。&lt;/p&gt;&lt;p&gt;而SortedDictionary与SortedSet关系非常紧密。&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;LinkedList&amp;lt;T&amp;gt; 通过双向链表这种数据结构实现。&lt;/p&gt;&lt;p&gt;关键数据成员：LinkedListNode head;&lt;/p&gt;&lt;p&gt;很显然这是链表的头。每个Node会有Previous以及Next这样的property。&lt;/p&gt;&lt;p&gt;Find()功能通过遍历List实现，所以是O( n )&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;Queue&amp;lt;T&amp;gt; 先进先出的队列。&lt;/p&gt;&lt;p&gt;关键数据成员： T[] _array; 毫无疑问，是通过数组来存放数据。&lt;/p&gt;&lt;p&gt;_tail; _head; _size;&lt;/p&gt;&lt;p&gt;有头有尾有大小，基本就是这样。&lt;/p&gt;&lt;p&gt;关键操作Enqueue()入队列 Dequeue()出队列。&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;SortedDictionary&amp;lt;T&amp;gt; 键值对字典数据类型，接口是IDictionary&amp;lt;TKey, TValue&amp;gt;。&lt;/p&gt;&lt;p&gt;内部关键数据成员TreeSet&amp;lt; KeyValuePair&amp;lt;TKey, TValue&amp;gt; &amp;gt; _set;&lt;/p&gt;&lt;p&gt;而TreeSet继承了SortedSet，操作基本上都是通过类似这样：第一个值使用Key，第二个值使用Default（TValue） 构造产生，然后调用_set的相关操作。&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;SortedList&amp;lt;T&amp;gt; 排序列表&lt;/p&gt;&lt;p&gt;TKey[] keys;&lt;/p&gt;&lt;p&gt;TKey[] values;&lt;/p&gt;&lt;p&gt;_size;&lt;/p&gt;&lt;p&gt;Add()，通过Array.BinarySearch&amp;lt;TKey&amp;gt;找到索引位置，然后进行插入操作。O(log n)。&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;另外要说一下，这里面的比较都是使用了IComparer，这实际上使用了设计模式中的策略模式，让用户可以自己定制。默认情况下是使用Comparer&amp;lt;T&amp;gt;.Default.&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;SortedSet&amp;lt;T&amp;gt;&lt;/p&gt;&lt;p&gt;关键数据成员：SortedSet&amp;lt;T&amp;gt;.Node root;&lt;/p&gt;&lt;p&gt;插入操作为AddIfNotPresent()这个函数名字已经说明了一切。&lt;/p&gt;&lt;p&gt;内部构造使用的数据结构为红黑树（一种自平衡二叉搜索树），有IsBlack和IsRed，以及Left、Right这些property。&lt;/p&gt;&lt;p&gt;搜索、插入、删除都是O(log n)。&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;另外要注意其中的Reverse()函数，使用了yield return xxx;以及yield break;这两种用法。&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;Stack&amp;lt;T&amp;gt;&lt;/p&gt;&lt;p&gt;T[] _array; 后进先出，没啥可说的。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;HashSet&amp;lt;T&amp;gt;&lt;/p&gt;&lt;p&gt;关键数据成员：&lt;/p&gt;&lt;p&gt;int[] m_buckets;&lt;/p&gt;&lt;p&gt;HashSet&amp;lt;T&amp;gt;.Slot[] m_slots;&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;Slot的定义如下：&lt;/p&gt;&lt;p&gt;internal struct Slot&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;    internal int hashCode;&lt;br /&gt;&amp;nbsp; internal T value;&lt;br /&gt;&amp;nbsp; internal int next;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;搜索或者是插入算法基本上是这个路子：&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;int num = this.InternalGetHashCode(value);&lt;br /&gt;for (int i = this.m_buckets[num % this.m_buckets.Length] - 1; i &amp;gt;= 0; i = this.m_slots[i].next)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;    //if (this.m_slots[i].hashCode == num &amp;amp;&amp;amp; this.m_comparer.Equals(this.m_slots[i].value, value))&lt;br /&gt;&amp;hellip;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;这里是搜索，先算出一个哈希值，然后判断在那个桶中，拿到桶里面第一个元素（this.m_slots[i]）。&lt;/p&gt;&lt;p&gt;然后通过next这个成员变量来获取下一个索引位置，然后对hash代码以及通过comparer比较。&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;img src="http://sunxiunan.com/wp-content/uploads/2011/07/450px-Hash_table_5_0_1_1_1_1_1_LL.svg_thumb.png" height="378" width="548" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;（图片来自&lt;a title="http://en.wikipedia.org/wiki/Hash_table" href="http://en.wikipedia.org/wiki/Hash_table"&gt;http://en.wikipedia.org/wiki/Hash_table&lt;/a&gt;）&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;插入操作也差不多，在这里面有一个this.m_freeList（一个int整数）保存了空闲列表位置，&lt;/p&gt;&lt;p&gt;然后把要插入的元素放在这个列表位置，再把m_freelist设置为这个列表位置的next。&lt;/p&gt;&lt;p&gt;因为空间可能不是连续的，所以我们使用的m_freelist这个位置与next未必是紧挨着的关系。&lt;/p&gt;&lt;p&gt;这个空闲列表的next关系维护，是由IncreaseCapacity()函数完成。其实C语言中的malloc函数也可以这样简单实现（当然实际中malloc肯定是复杂的多得多得多）。&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;----------------------------------------------------------&lt;/p&gt;&lt;p&gt;ILSpy是个好东西，最新版本在这里下载&lt;a href="http://www.ilspy.net/"&gt;http://www.ilspy.net/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/2113328.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/07/21/2113328.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/07/21/2113239.html</id><title type="text">String s = new String(&amp;quot;xyz&amp;quot;);创建了多少个String实例？</title><summary type="text">在”传智播客DotNet面试宝典(改).pdf“有这样一道非常有意思，也比较有深度的题目。String s = new String("xyz");创建了多少个String实例？传智的老师告诉同学们：答案是两个，一个是"xyz"，一个是指向"xyz"的引用对象。貌似很正确，很有道理。没错，"xyz"是一个字符串，而DotNet字符串（其实Java也是）有驻留intern这样一种机制。抱歉的是，传智的老师没有料到，问这个问题的同学或者是公司太坏了。这道题的题目是错的，答案也不对。大家手头有visualstudio的可</summary><published>2011-07-21T12:48:00Z</published><updated>2011-07-21T12:48:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/07/21/2113239.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/07/21/2113239.html"/><content type="html">&lt;p&gt;在&amp;rdquo;传智播客DotNet面试宝典(改).pdf&amp;ldquo;有这样一道非常有意思，也比较有深度的题目。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;String s = new String("xyz");创建了多少个String实例？&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;传智的老师告诉同学们：答案是两个，一个是"xyz"，一个是指向"xyz"的引用对象。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;貌似很正确，很有道理。没错，"xyz"是一个字符串，而DotNet字符串（其实Java也是）有驻留intern这样一种机制。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;抱歉的是，传智的老师没有料到，问这个问题的同学或者是公司太坏了。这道题的题目是错的，答案也不对。&lt;/p&gt;&lt;p&gt;大家手头有visualstudio的可以建立一个console程序试试看，能不能编译通过？！&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;至于答案为什么也不对，看看这篇非常详细的解释吧，虽然作者解释的是针对Java语言。&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.iteye.com/topic/774673" href="http://www.iteye.com/topic/774673"&gt;http://www.iteye.com/topic/774673&lt;/a&gt;&lt;/p&gt;&lt;p&gt;为什么Java能这样写？因为Java有这种构造函数&lt;code&gt;&lt;b&gt;&lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#String%28java.lang.String%29"&gt;String&lt;/a&gt;&lt;/b&gt;(&lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html"&gt;String&lt;/a&gt; original)而DotNet中的String类没有。&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;稍微修改让它能够编译&lt;/p&gt;        static void Main(string[] args)&lt;br/&gt;        {&lt;br/&gt;            char[] chars = { 'w', 'o', 'r', 'd' };&lt;br/&gt; &lt;br/&gt;            String s2 = new String(chars);&lt;br/&gt;            String s3 = new String(chars);&lt;br/&gt;            int i = s2.Length;&lt;br/&gt;            int j = s3.Length;&lt;br/&gt;            Console.WriteLine(i + j);&lt;br/&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;p&gt;如果我们用ILSpy看，结果如下，注意，其中只调用了两次newobj，分别是针对s2和s3。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;.method private hidebysig static&lt;br /&gt;void Main (&lt;br /&gt;string[] args&lt;br /&gt;    ) cil managed&lt;br /&gt;{&lt;br /&gt;// Method begins at RVA 0x2058&lt;br /&gt;// Code size 57 (0x39)&lt;br /&gt;.maxstack 3&lt;br /&gt;.entrypoint&lt;br /&gt;.locals init (&lt;br /&gt;&amp;nbsp;        [0] char[] chars,&lt;br /&gt;&amp;nbsp;        [1] string s2,&lt;br /&gt;&amp;nbsp;        [2] string s3,&lt;br /&gt;&amp;nbsp;        [3] int32 i,&lt;br /&gt;&amp;nbsp;        [4] int32 j&lt;br /&gt;    )&lt;br /&gt;    IL_0000: ldc.i4.4&lt;br /&gt;    IL_0001: newarr [mscorlib]System.Char&lt;br /&gt;    IL_0006: dup&lt;br /&gt;    IL_0007: ldtoken field int64 '&amp;lt;PrivateImplementationDetails&amp;gt;{06FAE1C3-0E45-4AE7-A401-B8A7D1EFF5D6}'::'$$method0x6000001-1'&lt;br /&gt;    IL_000c: call void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array, valuetype [mscorlib]System.RuntimeFieldHandle)&lt;br /&gt;    IL_0011: stloc.0&lt;/p&gt;&lt;p&gt;&lt;br /&gt;    IL_0012: ldloc.0&lt;br /&gt;    IL_0013: newobj instance void [mscorlib]System.String::.ctor(char[])&lt;br /&gt;    IL_0018: stloc.1&lt;/p&gt;&lt;p&gt;IL_0019: ldloc.0&lt;br /&gt;    IL_001a: newobj instance void [mscorlib]System.String::.ctor(char[])&lt;br /&gt;    IL_001f: stloc.2&lt;/p&gt;&lt;p&gt;IL_0020: ldloc.1&lt;br /&gt;    IL_0021: callvirt instance int32 [mscorlib]System.String::get_Length()&lt;br /&gt;    IL_0026: stloc.3&lt;/p&gt;&lt;p&gt;IL_0027: ldloc.2&lt;br /&gt;    IL_0028: callvirt instance int32 [mscorlib]System.String::get_Length()&lt;br /&gt;    IL_002d: stloc.s j&lt;/p&gt;&lt;p&gt;IL_002f: ldloc.3&lt;br /&gt;    IL_0030: ldloc.s j&lt;br /&gt;    IL_0032: add&lt;br /&gt;    IL_0033: call void [mscorlib]System.Console::WriteLine(int32)&lt;br /&gt;    IL_0038: ret&lt;br /&gt;} // end of method Program::Main&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/2113239.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/07/21/2113239.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/07/13/2104807.html</id><title type="text">大连对日外包程序员如何提高自己基础水平以及一些C#的资料链接</title><summary type="text">我在推上发了一些牢骚，有些朋友来面试，基础不是很扎实，理由是自己一直做对日外包，没有机会提升自己，掌握一些基础内容。另外一个理由是公司只用了某某技术，没有用某某技术，只用了2.0，所以我不知道3.5、4.0等等。这都不是理由。这都不是理由！这时候我假设自己是一个对日外包企业的程序员，吃完饭后老婆在看电视，我拿起Thinkpad笔记本，登录进著名的MSDN，开始继续自我提升的步骤。坚持每天抽出半小时到一小时学习，足够你提升自己的水平！这次也不推荐书了，只要能上网，就每天看一段MSDN的文章或者代码。保证能提高自己！首先要知道自己缺少什么，有一个评估很有意思也很容易评估自己需要提升哪些地方：《程序</summary><published>2011-07-12T16:32:00Z</published><updated>2011-07-12T16:32:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/07/13/2104807.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/07/13/2104807.html"/><content type="html">&lt;div class="entry-content"&gt;&lt;p&gt;我在推上发了一些牢骚，有些朋友来面试，基础不是很扎实，理由是自己一直做对日外包，没有机会提升自己，掌握一些基础内容。&lt;/p&gt;&lt;p&gt;另外一个理由是公司只用了某某技术，没有用某某技术，只用了2.0，所以我不知道3.5、4.0等等。&lt;/p&gt;&lt;p&gt;这都不是理由。&lt;/p&gt;&lt;p&gt;这都不是理由！&lt;/p&gt;&lt;p&gt;这时候我假设自己是一个对日外包企业的程序员，吃完饭后老婆在看电视，我拿起Thinkpad笔记本，登录进著名的MSDN，开始继续自我提升的步骤。&lt;/p&gt;&lt;p&gt;坚持每天抽出半小时到一小时学习，足够你提升自己的水平！&lt;/p&gt;&lt;p&gt;这次也不推荐书了，只要能上网，就每天看一段MSDN的文章或者代码。保证能提高自己！&lt;/p&gt;&lt;p&gt;首先要知道自己缺少什么，有一个评估很有意思也很容易评估自己需要提升哪些地方：《程序员能力矩阵》&lt;a title="http://static.icybear.net/%5BCN%5DProgrammer%20competency%20matrix.htm" href="http://static.icybear.net/%5BCN%5DProgrammer%20competency%20matrix.htm"&gt;http://static.icybear.net/%5BCN%5DProgrammer%20competency%20matrix.htm&lt;/a&gt; 这里假定我想提升Windows平台上DotNet、CSharp开发。&lt;/p&gt;&lt;p&gt;这里有一系列链接可以学习，每天一篇或者几天一篇应该没问题。其实比较好的办法是买本书系统学习，但我这里想说的是，资料到处都是，书籍唾手可及。&lt;/p&gt;&lt;p&gt;没用心不努力才是水平差基础薄弱的最大原因！&lt;/p&gt;&lt;p&gt;下面的链接没有什么系统性，如果有一两年经验了，看这些东西问题不大。&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/3bwa4xa9.aspx" href="http://msdn.microsoft.com/en-us/library/3bwa4xa9.aspx"&gt;http://msdn.microsoft.com/en-us/library/3bwa4xa9.aspx&lt;/a&gt; Using Objects That Encapsulate Resources&lt;/p&gt;&lt;p&gt;这一篇要着重提一下，很多四五年经验的C#开发者，不知道using关键字的这种用法，怎么说呢，说你不求甚解好呢？还是说你不够努力好呢？&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/dd642420.aspx" href="http://msdn.microsoft.com/en-us/library/dd642420.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd642420.aspx&lt;/a&gt; Visual Studio 2010 Visual Basic and Visual C#&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/618ayhy6.aspx" href="http://msdn.microsoft.com/en-us/library/618ayhy6.aspx"&gt;http://msdn.microsoft.com/en-us/library/618ayhy6.aspx&lt;/a&gt; C# Reference&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx" href="http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx"&gt;http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx&lt;/a&gt; C# Programming Guide&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/dd460655.aspx" href="http://msdn.microsoft.com/en-us/library/dd460655.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd460655.aspx&lt;/a&gt; Programming Concepts&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/w0x726c2.aspx" href="http://msdn.microsoft.com/en-us/library/w0x726c2.aspx"&gt;http://msdn.microsoft.com/en-us/library/w0x726c2.aspx&lt;/a&gt; .NET Framework 4&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/w0x726c2%28VS.90%29.aspx" href="http://msdn.microsoft.com/en-us/library/w0x726c2%28VS.90%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/w0x726c2%28VS.90%29.aspx&lt;/a&gt; .NET Framework 3.5&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ff921347.aspx" href="http://msdn.microsoft.com/en-us/library/ff921347.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff921347.aspx&lt;/a&gt; EnterpriseLibrary Unity MEF Prism这些概念，至少知道它们是什么&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/zh-cn/magazine/default.aspx" href="http://msdn.microsoft.com/zh-cn/magazine/default.aspx"&gt;http://msdn.microsoft.com/zh-cn/magazine/default.aspx&lt;/a&gt; MSDN杂志&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/orm-9780596516109-03.aspx" href="http://msdn.microsoft.com/en-us/library/orm-9780596516109-03.aspx"&gt;http://msdn.microsoft.com/en-us/library/orm-9780596516109-03.aspx&lt;/a&gt; C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/orm-9780596527730-01.aspx" href="http://msdn.microsoft.com/en-us/library/orm-9780596527730-01.aspx"&gt;http://msdn.microsoft.com/en-us/library/orm-9780596527730-01.aspx&lt;/a&gt; C# 3.0 Design Patterns: Use the Power of C# 3.0 to Solve Real-World Problems&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/k5532s8a.aspx" href="http://msdn.microsoft.com/en-us/library/k5532s8a.aspx"&gt;http://msdn.microsoft.com/en-us/library/k5532s8a.aspx&lt;/a&gt; .NET Framework 4 CLR Managed Execution Process&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/f144e03t.aspx" href="http://msdn.microsoft.com/en-us/library/f144e03t.aspx"&gt;http://msdn.microsoft.com/en-us/library/f144e03t.aspx&lt;/a&gt; Automatic Memory Management （GC）&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ee787088.aspx" href="http://msdn.microsoft.com/en-us/library/ee787088.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee787088.aspx&lt;/a&gt; Fundamentals of Garbage Collection&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms404247.aspx" href="http://msdn.microsoft.com/en-us/library/ms404247.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms404247.aspx&lt;/a&gt; Weak References&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms172334.aspx" href="http://msdn.microsoft.com/en-us/library/ms172334.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms172334.aspx&lt;/a&gt; Reflection and Generic Types&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/a4a92379.aspx" href="http://msdn.microsoft.com/en-us/library/a4a92379.aspx"&gt;http://msdn.microsoft.com/en-us/library/a4a92379.aspx&lt;/a&gt; Accessing Custom Attributes&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ff519622.aspx" href="http://msdn.microsoft.com/en-us/library/ff519622.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff519622.aspx&lt;/a&gt; Observer Design Pattern Best Practices&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/sd10k43k.aspx" href="http://msdn.microsoft.com/en-us/library/sd10k43k.aspx"&gt;http://msdn.microsoft.com/en-us/library/sd10k43k.aspx&lt;/a&gt; Interoperating with Unmanaged Code&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/hyz69czz.aspx" href="http://msdn.microsoft.com/en-us/library/hyz69czz.aspx"&gt;http://msdn.microsoft.com/en-us/library/hyz69czz.aspx&lt;/a&gt; Managed Threading Basics&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973850.aspx" href="http://msdn.microsoft.com/en-us/library/ms973850.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973850.aspx&lt;/a&gt; Microsoft .NET Framework FAQ&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973837.aspx" href="http://msdn.microsoft.com/en-us/library/ms973837.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973837.aspx&lt;/a&gt; Garbage Collector Basics and Performance Hints&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/bb985748.aspx" href="http://msdn.microsoft.com/en-us/library/bb985748.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb985748.aspx&lt;/a&gt; Displaying Metadata in .NET EXEs with MetaViewer&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973858.aspx" href="http://msdn.microsoft.com/en-us/library/ms973858.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973858.aspx&lt;/a&gt; Writing High-Performance Managed Applications : A Primer&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/magazine/cc164086.aspx" href="http://msdn.microsoft.com/en-us/magazine/cc164086.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc164086.aspx&lt;/a&gt; Implementing Coroutines for .NET by Wrapping the Unmanaged Fiber API&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa479866.aspx" href="http://msdn.microsoft.com/en-us/library/aa479866.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa479866.aspx&lt;/a&gt; Generics FAQ: .NET Framework&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa479858.aspx" href="http://msdn.microsoft.com/en-us/library/aa479858.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa479858.aspx&lt;/a&gt; Generics FAQ: Best Practices&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa479859.aspx" href="http://msdn.microsoft.com/en-us/library/aa479859.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa479859.aspx&lt;/a&gt; Generics FAQ: Fundamentals&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa302329.aspx" href="http://msdn.microsoft.com/en-us/library/aa302329.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa302329.aspx&lt;/a&gt; Improving String Handling Performance in .NET Framework Applications&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973880.aspx" href="http://msdn.microsoft.com/en-us/library/ms973880.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973880.aspx&lt;/a&gt; The Microsoft Shared Source CLI Implementation Refresh&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/bb985613.aspx" href="http://msdn.microsoft.com/en-us/library/bb985613.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb985613.aspx&lt;/a&gt; Migrating Native Code to the .NET CLR&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/magazine/cc164123.aspx" href="http://msdn.microsoft.com/en-us/magazine/cc164123.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc164123.aspx&lt;/a&gt; Calling Win32 DLLs in C# with P/Invoke&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/magazine/cc164139.aspx" href="http://msdn.microsoft.com/en-us/magazine/cc164139.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc164139.aspx&lt;/a&gt; The CLR&amp;rsquo;s Thread Pool&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/magazine/cc164094.aspx" href="http://msdn.microsoft.com/en-us/magazine/cc164094.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc164094.aspx&lt;/a&gt; Introducing Generics in the CLR&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973893.aspx" href="http://msdn.microsoft.com/en-us/library/ms973893.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973893.aspx&lt;/a&gt; Object Serialization in the .NET Framework&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973872.aspx" href="http://msdn.microsoft.com/en-us/library/ms973872.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973872.aspx&lt;/a&gt; An Overview of Managed/Unmanaged Code Interoperability&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973838.aspx" href="http://msdn.microsoft.com/en-us/library/ms973838.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973838.aspx&lt;/a&gt; Performance Considerations for Run-Time Technologies in the .NET Framework&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973839.aspx" href="http://msdn.microsoft.com/en-us/library/ms973839.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973839.aspx&lt;/a&gt; Performance Tips and Tricks in .NET Applications&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa302338.aspx" href="http://msdn.microsoft.com/en-us/library/aa302338.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa302338.aspx&lt;/a&gt; Primary Interop Assemblies (PIAs)&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/bb264782.aspx" href="http://msdn.microsoft.com/en-us/library/bb264782.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb264782.aspx&lt;/a&gt; Profiler Stack Walking in the .NET Framework 2.0: Basics and Beyond&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa302324.aspx" href="http://msdn.microsoft.com/en-us/library/aa302324.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa302324.aspx&lt;/a&gt; Using the .NET Framework SDK Interoperability Tools&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms973826.aspx" href="http://msdn.microsoft.com/en-us/library/ms973826.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms973826.aspx&lt;/a&gt; Using the ECMA Standards: An Interview with Miguel de Icaza&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/2104807.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/07/13/2104807.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/07/05/2098649.html</id><title type="text">C语言中if (p==NULL)的是与非</title><summary type="text">博客园cnblogs不知为何最近开始渐有C语言开发重启的迹象，不少人开始写一些C语言的教程。其中看到一段有趣的留言，提到这个写法：if (p == NULL)，有人说这是不好的~，经典不提倡的~，会写错出问题的~，华为都禁止的~。我倒是有些不同的看法。首先这种写法是有问题，一般来讲对于空指针可以这样写if ( p )或者反义是这样 if ( !p )既简单，还节省字数。如果是想写的比较容易懂，那么if (p == NULL) 是我提倡的方式。你可以很简单的读成“如果p等于空值”，反过来的方式NULL==p就有些别扭，不是给人看的。有人提到p==NULL很容易写成p=NULL，代码出错啦！会有b</summary><published>2011-07-05T12:57:00Z</published><updated>2011-07-05T12:57:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/07/05/2098649.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/07/05/2098649.html"/><content type="html">&lt;p&gt;博客园cnblogs不知为何最近开始渐有C语言开发重启的迹象，不少人开始写一些C语言的教程。&lt;/p&gt;&lt;p&gt;其中看到一段有趣的留言，提到这个写法：if (p == NULL)，&lt;/p&gt;&lt;p&gt;有人说这是不好的~，经典不提倡的~，会写错出问题的~，华为都禁止的~。&lt;/p&gt;&lt;p&gt;我倒是有些不同的看法。&lt;/p&gt;&lt;p&gt;首先这种写法是有问题，一般来讲对于空指针可以这样写&lt;/p&gt;&lt;p&gt;if ( p )&lt;/p&gt;&lt;p&gt;或者反义是这样 if ( !p )&lt;/p&gt;&lt;p&gt;既简单，还节省字数。&lt;/p&gt;&lt;p&gt;如果是想写的比较容易懂，那么if (p == NULL) 是我提倡的方式。&lt;/p&gt;&lt;p&gt;你可以很简单的读成&amp;ldquo;如果p等于空值&amp;rdquo;，反过来的方式NULL==p就有些别扭，不是给人看的。&lt;/p&gt;&lt;p&gt;有人提到p==NULL很容易写成p=NULL，代码出错啦！会有bug啦！&lt;/p&gt;&lt;p&gt;好吧，我承认这是一种可能性，在早期编译器不完善的时候的确如此。那时候还提倡用匈牙利命名法，因为编译器对类型识别支持不好，很容易写出胡乱转型的代码（当然现在的C语言也容易）。但是针对正在使用的编译器以及将来更先进的编译器，在条件判断中使用p==NULL不是问题。&lt;/p&gt;&lt;p&gt;做一个很简单的实验，使用VC2010，项目设置为compile as C，注意关键一点&amp;ldquo;把warning级别提高到最高级别4&amp;rdquo;，这时候if (p=NULL )会得到如下警告：&lt;/p&gt;&lt;p&gt;1&amp;gt;purec.cpp(10): warning C4706: assignment within conditional expression&lt;/p&gt;&lt;p&gt;很简单吧，不需要你使用那种反人类常识的代码规范。&lt;/p&gt;&lt;p&gt;使用GCC（v4.5.2 in Ubuntu11.4）也很容易，它有一个编译选项-Wall，警告信息如下：&lt;/p&gt;&lt;p&gt;/home/sun/foobar-sample/main.c:24:2: warning: suggest parentheses around assignment used as truth value&lt;/p&gt;&lt;p&gt;如果工具支持，为何不使用一种更为合乎阅读习惯的方式呢，BTW，我查找了一下经典的K&amp;amp;R，其中==的使用都是我提到的p==0这种方式，其它更为经典的（有么？）我就不知道了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/2098649.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/07/05/2098649.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/04/15/2017644.html</id><title type="text">C#研究系列-List&amp;lt;&amp;gt;与ArrayList的几个研究心得及问题（上）</title><summary type="text">代码放在https://gist.github.com/921076 上了，看不到的请留言。第一个心得，是我看某本书提到，IList用起来要比ArrayList快。这里面用到了我上一篇博客提到的高精度计时器（在这里能看到代码 http://sunxiunan.com/?p=1829 ）在开始定义了两个类。//--------------------- // public class List : IList, ICollection, IEnumerable, IList, ICollection, IEnumerable class CFromList : List{} // public </summary><published>2011-04-15T15:55:00Z</published><updated>2011-04-15T15:55:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/04/15/2017644.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/04/15/2017644.html"/><content type="html">&lt;p&gt;代码放在https://gist.github.com/921076 上了，看不到的请留言。&lt;/p&gt;&lt;p&gt;第一个心得，是我看某本书提到，IList用起来要比ArrayList快。&lt;/p&gt;&lt;p&gt;这里面用到了我上一篇博客提到的高精度计时器（在这里能看到代码 http://sunxiunan.com/?p=1829 ）&lt;/p&gt;&lt;p&gt;在开始定义了两个类。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;//---------------------&lt;/p&gt;&lt;p&gt;    // public class List : IList, ICollection, IEnumerable, IList, ICollection, IEnumerable&lt;br /&gt;    class CFromList : List&lt;/p&gt;&lt;p&gt;{}&lt;/p&gt;&lt;p&gt;    // public class ArrayList : IList, ICollection, IEnumerable, ICloneable&lt;br /&gt;    class CFromArrayList : ArrayList&lt;/p&gt;&lt;p&gt;{}&lt;/p&gt;&lt;p&gt;//---------------------&lt;/p&gt;&lt;p&gt;List和ArrayList的定义在注释中给出，可以看出来其实都差不多。ArrayList只是多了ICloneable，还少了几个泛型接口继承。&lt;/p&gt;&lt;p&gt;在后面代码中都用Add方法向list中添加int类型数据，然后通过foreach形式枚举数据，注意！枚举部分的代码是有问题的，我们在（下）中会提到。&lt;/p&gt;&lt;p&gt;这里还要推荐一个非常棒的工具ILSpy，是sharpdevelop开发的，强烈建议dotnet程序员都下载使用。&lt;/p&gt;&lt;p&gt;我把ILSpy disassemble出来的C#代码和IL代码分别列在后面。注意对于ArrayList的foreach语句，C#形式的代码与源代码有些差别（79到96行），编译器加入一个IEnumerator enumerator2 = cFromArrayList.GetEnumerator();本地变量。&lt;/p&gt;&lt;p&gt;另外使用int num5 = (int)enumerator2.Current;这样访问iterator。而且还加入了IDisposable的finally部分。&lt;/p&gt;&lt;p&gt;再继续看IL代码部分，对于List形式，IL代码没有box装箱指令，而ArrayList在145行有个box指令，这是性能差别之一。&lt;br /&gt;但是奇怪的是，在枚举部分，ILSpy生成的（以及ILDasm）IL代码，对于ArrayList和List而言，基本上差别不大，一样也有对MoveNext和Current以及IDisposable接口的调用。&lt;/p&gt;&lt;p&gt;只不过ArrayList多出unbox和box的指令。&lt;/p&gt;&lt;p&gt;运行结果如我们所料，List要比ArrayList快不少。&lt;/p&gt;&lt;p&gt;但是我们在枚举部分的代码是有问题的，我明天在（下）中会介绍。&lt;/p&gt;&lt;div class="line" id="LC1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// public class List&amp;lt;T&amp;gt; : IList&amp;lt;T&amp;gt;, ICollection&amp;lt;T&amp;gt;, IEnumerable&amp;lt;T&amp;gt;, IList, ICollection, IEnumerable&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CFromList&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;{}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;// public class ArrayList : IList, ICollection, IEnumerable, ICloneable&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CFromArrayList&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="p"&gt;{}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Form1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Form&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;button1_Click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EventArgs&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;CFromList&lt;/span&gt; &lt;span class="n"&gt;list1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;CFromList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;CFromArrayList&lt;/span&gt; &lt;span class="n"&gt;list2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;CFromArrayList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;////////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;timera&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;list1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="m"&gt;99999&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;Int64&lt;/span&gt; &lt;span class="n"&gt;reta&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;////////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;timerb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;list2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="m"&gt;99999&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;Int64&lt;/span&gt; &lt;span class="n"&gt;retb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timerb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;////////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;timer1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;elem1&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;list1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;list1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;++]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;elem1&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;99&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                &lt;/div&gt;&lt;div class="line" id="LC37"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;Int64&lt;/span&gt; &lt;span class="n"&gt;ret1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timer1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;////////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;timer2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;elem2&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;list2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;list2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;++]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;elem2&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;99&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC48"&gt;&lt;/div&gt;&lt;div class="line" id="LC49"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;Int64&lt;/span&gt; &lt;span class="n"&gt;ret2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timer2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC50"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;////////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC51"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC52"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC53"&gt;&lt;/div&gt;&lt;div class="line" id="LC54"&gt;&lt;span class="c1"&gt;///////////////////////////////////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC55"&gt;&lt;span class="c1"&gt;// result from ILSpy&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC56"&gt;&lt;span class="n"&gt;CFromList&lt;/span&gt; &lt;span class="n"&gt;cFromList&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;CFromList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC57"&gt;&lt;span class="n"&gt;CFromArrayList&lt;/span&gt; &lt;span class="n"&gt;cFromArrayList&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;CFromArrayList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC58"&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC59"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC60"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC61"&gt;&lt;span class="n"&gt;cFromList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="m"&gt;99999&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC62"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC63"&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC64"&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC65"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC66"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC67"&gt;&lt;span class="n"&gt;cFromArrayList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="m"&gt;99999&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC68"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC69"&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;num2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC70"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num3&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC71"&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer3&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC72"&gt;&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cFromList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC73"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC74"&gt;&lt;span class="n"&gt;cFromList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="p"&gt;++]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;99&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC75"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC76"&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;num4&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC77"&gt;&lt;span class="n"&gt;num3&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC78"&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer4&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC79"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="n"&gt;IEnumerator&lt;/span&gt; &lt;span class="n"&gt;enumerator2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cFromArrayList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetEnumerator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC80"&gt;&lt;span style="color: #800000;" class="k"&gt;try&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC81"&gt;&lt;span style="color: #800000;" class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC82"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enumerator2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MoveNext&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC83"&gt;&lt;span style="color: #800000;" class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC84"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num5&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;enumerator2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC85"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="n"&gt;cFromArrayList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;num3&lt;/span&gt;&lt;span class="p"&gt;++]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num5&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;99&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC86"&gt;&lt;span style="color: #800000;" class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC87"&gt;&lt;span style="color: #800000;" class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC88"&gt;&lt;span style="color: #800000;" class="k"&gt;finally&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC89"&gt;&lt;span style="color: #800000;" class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC90"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="n"&gt;IDisposable&lt;/span&gt; &lt;span class="n"&gt;disposable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;enumerator2&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;IDisposable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC91"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;disposable&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC92"&gt;&lt;span style="color: #800000;" class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC93"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="n"&gt;disposable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dispose&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC94"&gt;&lt;span style="color: #800000;" class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC95"&gt;&lt;span style="color: #800000;" class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC96"&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;num6&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;highResolutionTimer4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC97"&gt;&lt;/div&gt;&lt;div class="line" id="LC98"&gt;&lt;/div&gt;&lt;div class="line" id="LC99"&gt;&lt;span class="c1"&gt;//////////////////////////////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC100"&gt;&lt;span class="c1"&gt;// result from ILSpy IL format&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC101"&gt;&lt;span class="n"&gt;IL_0000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC102"&gt;&lt;span class="n"&gt;IL_0001&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;newobj&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CFromList&lt;/span&gt;&lt;span class="p"&gt;::.&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC103"&gt;&lt;span class="n"&gt;IL_0006&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC104"&gt;&lt;span class="n"&gt;IL_0007&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;newobj&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CFromArrayList&lt;/span&gt;&lt;span class="p"&gt;::.&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC105"&gt;&lt;span class="n"&gt;IL_000c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC106"&gt;&lt;span class="n"&gt;IL_000d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;newobj&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::.&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC107"&gt;&lt;span class="n"&gt;IL_0012&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC108"&gt;&lt;span class="n"&gt;IL_0013&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC109"&gt;&lt;span class="n"&gt;IL_0014&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC110"&gt;&lt;span class="n"&gt;IL_0015&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_002b&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC111"&gt;&lt;span class="c1"&gt;// loop start (head: IL_002b)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC112"&gt;&lt;span class="n"&gt;IL_0017&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC113"&gt;&lt;span class="n"&gt;IL_0018&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC114"&gt;&lt;span class="n"&gt;IL_0019&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC115"&gt;&lt;span class="n"&gt;IL_001a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt; &lt;span class="m"&gt;99999&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC116"&gt;&lt;span class="n"&gt;IL_001f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sub&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC117"&gt;&lt;span class="n"&gt;IL_0020&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC118"&gt;&lt;span class="n"&gt;IL_0025&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC119"&gt;&lt;span class="n"&gt;IL_0026&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC120"&gt;&lt;span class="n"&gt;IL_0027&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC121"&gt;&lt;span class="n"&gt;IL_0028&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC122"&gt;&lt;span class="n"&gt;IL_0029&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC123"&gt;&lt;span class="n"&gt;IL_002a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC124"&gt;&lt;span class="n"&gt;IL_002b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC125"&gt;&lt;span class="n"&gt;IL_002c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt; &lt;span class="m"&gt;100000&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC126"&gt;&lt;span class="n"&gt;IL_0031&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clt&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC127"&gt;&lt;span class="n"&gt;IL_0033&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC128"&gt;&lt;span class="n"&gt;IL_0035&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC129"&gt;&lt;span class="n"&gt;IL_0037&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;brtrue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_0017&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC130"&gt;&lt;span class="c1"&gt;// end loop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC131"&gt;&lt;span class="n"&gt;IL_0039&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC132"&gt;&lt;span class="n"&gt;IL_003a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="n"&gt;int64&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC133"&gt;&lt;span class="n"&gt;IL_003f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC134"&gt;&lt;span class="n"&gt;IL_0041&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;newobj&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::.&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC135"&gt;&lt;span class="n"&gt;IL_0046&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC136"&gt;&lt;span class="n"&gt;IL_0048&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC137"&gt;&lt;span class="n"&gt;IL_0049&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC138"&gt;&lt;span class="n"&gt;IL_004a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_0065&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC139"&gt;&lt;span class="c1"&gt;// loop start (head: IL_0065)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC140"&gt;&lt;span class="n"&gt;IL_004c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC141"&gt;&lt;span class="n"&gt;IL_004d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC142"&gt;&lt;span class="n"&gt;IL_004e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC143"&gt;&lt;span class="n"&gt;IL_004f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt; &lt;span class="m"&gt;99999&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC144"&gt;&lt;span class="n"&gt;IL_0054&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sub&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC145"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="n"&gt;IL_0055&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="n"&gt;int32&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC146"&gt;&lt;span class="n"&gt;IL_005a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="n"&gt;int32&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC147"&gt;&lt;span class="n"&gt;IL_005f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC148"&gt;&lt;span class="n"&gt;IL_0060&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC149"&gt;&lt;span class="n"&gt;IL_0061&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC150"&gt;&lt;span class="n"&gt;IL_0062&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC151"&gt;&lt;span class="n"&gt;IL_0063&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC152"&gt;&lt;span class="n"&gt;IL_0064&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC153"&gt;&lt;span class="n"&gt;IL_0065&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC154"&gt;&lt;span class="n"&gt;IL_0066&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt; &lt;span class="m"&gt;100000&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC155"&gt;&lt;span class="n"&gt;IL_006b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;clt&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC156"&gt;&lt;span class="n"&gt;IL_006d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC157"&gt;&lt;span class="n"&gt;IL_006f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC158"&gt;&lt;span class="n"&gt;IL_0071&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;brtrue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_004c&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC159"&gt;&lt;span class="c1"&gt;// end loop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC160"&gt;&lt;span class="n"&gt;IL_0073&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC161"&gt;&lt;span class="n"&gt;IL_0075&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="n"&gt;int64&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC162"&gt;&lt;span class="n"&gt;IL_007a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC163"&gt;&lt;span class="n"&gt;IL_007c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC164"&gt;&lt;span class="n"&gt;IL_007d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC165"&gt;&lt;span class="n"&gt;IL_007f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;newobj&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::.&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC166"&gt;&lt;span class="n"&gt;IL_0084&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC167"&gt;&lt;span class="n"&gt;IL_0086&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC168"&gt;&lt;span class="n"&gt;IL_0087&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC169"&gt;&lt;span class="n"&gt;IL_0088&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="n"&gt;valuetype&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Enumerator&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;GetEnumerator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC170"&gt;&lt;span class="n"&gt;IL_008d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC171"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC172"&gt;&lt;span class="n"&gt;IL_008f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_00af&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC173"&gt;&lt;span class="c1"&gt;// loop start (head: IL_00af)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC174"&gt;&lt;span class="n"&gt;IL_0091&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloca&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC175"&gt;&lt;span class="n"&gt;IL_0093&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Enumerator&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;get_Current&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC176"&gt;&lt;span class="n"&gt;IL_0098&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC177"&gt;&lt;span class="n"&gt;IL_009a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC178"&gt;&lt;span class="n"&gt;IL_009b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC179"&gt;&lt;span class="n"&gt;IL_009c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC180"&gt;&lt;span class="n"&gt;IL_009e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dup&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC181"&gt;&lt;span class="n"&gt;IL_009f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC182"&gt;&lt;span class="n"&gt;IL_00a0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC183"&gt;&lt;span class="n"&gt;IL_00a1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC184"&gt;&lt;span class="n"&gt;IL_00a3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC185"&gt;&lt;span class="n"&gt;IL_00a5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;99&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC186"&gt;&lt;span class="n"&gt;IL_00a7&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC187"&gt;&lt;span class="n"&gt;IL_00a8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;set_Item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC188"&gt;&lt;span class="n"&gt;IL_00ad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC189"&gt;&lt;span class="n"&gt;IL_00ae&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC190"&gt;&lt;span class="n"&gt;IL_00af&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloca&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC191"&gt;&lt;span class="n"&gt;IL_00b1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span style="font-size: 14px; color: #800000;"&gt;&lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Enumerator&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;MoveNext&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC192"&gt;&lt;span class="n"&gt;IL_00b6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC193"&gt;&lt;span class="n"&gt;IL_00b8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC194"&gt;&lt;span class="n"&gt;IL_00ba&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;brtrue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_0091&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC195"&gt;&lt;span class="c1"&gt;// end loop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC196"&gt;&lt;span class="n"&gt;IL_00bc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;leave&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_00cd&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC197"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// end .try&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC198"&gt;&lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC199"&gt;&lt;span class="n"&gt;IL_00be&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloca&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC200"&gt;&lt;span class="n"&gt;IL_00c0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;constrained&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;valuetype&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Enumerator&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC201"&gt;&lt;span class="n"&gt;IL_00c6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IDisposable&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Dispose&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC202"&gt;&lt;span class="n"&gt;IL_00cb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC203"&gt;&lt;span class="n"&gt;IL_00cc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;endfinally&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC204"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// end handler&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC205"&gt;&lt;span class="n"&gt;IL_00cd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC206"&gt;&lt;span class="n"&gt;IL_00ce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC207"&gt;&lt;span class="n"&gt;IL_00d0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="n"&gt;int64&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC208"&gt;&lt;span class="n"&gt;IL_00d5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC209"&gt;&lt;span class="n"&gt;IL_00d7&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC210"&gt;&lt;span class="n"&gt;IL_00d8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC211"&gt;&lt;span class="n"&gt;IL_00da&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;newobj&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::.&lt;/span&gt;&lt;span class="n"&gt;ctor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC212"&gt;&lt;span class="n"&gt;IL_00df&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC213"&gt;&lt;span class="n"&gt;IL_00e1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC214"&gt;&lt;span class="n"&gt;IL_00e2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC215"&gt;&lt;span class="n"&gt;IL_00e3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IEnumerator&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GetEnumerator&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC216"&gt;&lt;span class="n"&gt;IL_00e8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC217"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC218"&gt;&lt;span class="n"&gt;IL_00ea&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_0114&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC219"&gt;&lt;span class="c1"&gt;// loop start (head: IL_0114)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC220"&gt;&lt;span class="n"&gt;IL_00ec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC221"&gt;&lt;span class="n"&gt;IL_00ee&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IEnumerator&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_Current&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC222"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="n"&gt;IL_00f3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unbox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt; &lt;span class="n"&gt;int32&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC223"&gt;&lt;span class="n"&gt;IL_00f8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC224"&gt;&lt;span class="n"&gt;IL_00fa&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC225"&gt;&lt;span class="n"&gt;IL_00fb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC226"&gt;&lt;span class="n"&gt;IL_00fc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC227"&gt;&lt;span class="n"&gt;IL_00fe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dup&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC228"&gt;&lt;span class="n"&gt;IL_00ff&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC229"&gt;&lt;span class="n"&gt;IL_0100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC230"&gt;&lt;span class="n"&gt;IL_0101&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC231"&gt;&lt;span class="n"&gt;IL_0103&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC232"&gt;&lt;span class="n"&gt;IL_0105&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;i4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;99&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC233"&gt;&lt;span class="n"&gt;IL_0107&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC234"&gt;&lt;span style="color: #800000;"&gt;&lt;span class="n"&gt;IL_0108&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="n"&gt;int32&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC235"&gt;&lt;span class="n"&gt;IL_010d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;set_Item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;int32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC236"&gt;&lt;span class="n"&gt;IL_0112&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC237"&gt;&lt;span class="n"&gt;IL_0113&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC238"&gt;&lt;span class="n"&gt;IL_0114&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC239"&gt;&lt;span class="n"&gt;IL_0116&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span style="font-size: 14px; color: #800000;"&gt;&lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IEnumerator&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;MoveNext&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC240"&gt;&lt;span class="n"&gt;IL_011b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC241"&gt;&lt;span class="n"&gt;IL_011d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC242"&gt;&lt;span class="n"&gt;IL_011f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;brtrue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_00ec&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC243"&gt;&lt;span class="c1"&gt;// end loop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC244"&gt;&lt;span class="n"&gt;IL_0121&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;leave&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_0140&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC245"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// end .try&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC246"&gt;&lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC247"&gt;&lt;span class="n"&gt;IL_0123&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC248"&gt;&lt;span class="n"&gt;IL_0125&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;isinst&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IDisposable&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC249"&gt;&lt;span class="n"&gt;IL_012a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC250"&gt;&lt;span class="n"&gt;IL_012c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC251"&gt;&lt;span class="n"&gt;IL_012e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldnull&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC252"&gt;&lt;span class="n"&gt;IL_012f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ceq&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC253"&gt;&lt;span class="n"&gt;IL_0131&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC254"&gt;&lt;span class="n"&gt;IL_0133&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC255"&gt;&lt;span class="n"&gt;IL_0135&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;brtrue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;IL_013f&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC256"&gt;&lt;span class="n"&gt;IL_0137&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC257"&gt;&lt;span class="n"&gt;IL_0139&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mscorlib&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IDisposable&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Dispose&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC258"&gt;&lt;span class="n"&gt;IL_013e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC259"&gt;&lt;span class="n"&gt;IL_013f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;endfinally&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC260"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// end handler&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC261"&gt;&lt;span class="n"&gt;IL_0140&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nop&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC262"&gt;&lt;span class="n"&gt;IL_0141&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC263"&gt;&lt;span class="n"&gt;IL_0143&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;callvirt&lt;/span&gt; &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="n"&gt;int64&lt;/span&gt; &lt;span class="n"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HighResolutionTimer&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC264"&gt;&lt;span class="n"&gt;IL_0148&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stloc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="m"&gt;13&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/2017644.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/04/15/2017644.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/03/31/2000786.html</id><title type="text">如何学习使用C++一个实用主义者的观点</title><summary type="text">最近CoolShell连续发了两篇文字，《如何学习C语言》以及《如何学习C++》。我在twitter发了一些牢骚，因为我也曾经写过一篇《漫谈C语言及如何学习C语言》http://sunxiunan.com/?p=1661 ，文字写的还算用心，可惜反响不是很热烈。最近C++社区最大的新闻，毫无疑问就是最新标准终于Final Draft了，C++2011终于有望实现。可是，谁会关心呢？国内C++译作圈比较出名的就这几个人，刘未鹏PongBa，自从进入微软以后好像更加关注心智方面的研究，关于C++的文字几乎就没了。孟岩http://blog.csdn.net/myan 也是很久没有新博客文字，也少见</summary><published>2011-03-31T03:29:00Z</published><updated>2011-03-31T03:29:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/03/31/2000786.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/03/31/2000786.html"/><content type="html">&lt;div class="entry-content"&gt;&lt;p&gt;最近CoolShell连续发了两篇文字，《如何学习C语言》以及《如何学习C++》。我在twitter发了一些牢骚，因为我也曾经写过一篇《漫谈C语言及如何学习C语言》&lt;a href="http://sunxiunan.com/?p=1661"&gt;http://sunxiunan.com/?p=1661&lt;/a&gt; ，文字写的还算用心，可惜反响不是很热烈。&lt;/p&gt;&lt;p&gt;最近C++社区最大的新闻，毫无疑问就是最新标准终于Final Draft了，C++2011终于有望实现。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;可是，谁会关心呢？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;国内C++译作圈比较出名的就这几个人，刘未鹏PongBa，自从进入微软以后好像更加关注心智方面的研究，关于C++的文字几乎就没了。孟岩http://blog.csdn.net/myan 也是很久没有新博客文字，也少见C++方面的内容。荣耀，好像也是非常低调。最出名的莫过台湾的侯捷老师，他现在忙于企业培训，估计没啥时间写新文字。这些人里面关于C++最新标准的，还是刘未鹏在07年写的C++0X漫谈。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;07年啊！！那时候房价还没有这么高！！物价也没有这么高！！！车也没有这么多！！！路也没有这么堵！！搞C++的程序员你伤不起啊！！！&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;瞎扯一下，回到正题。&lt;strong&gt;（一个初学者）如何学习以及使用C++&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;看完coolshell的文字，以及刘未鹏曾经写过的《学习C++：实践者的方法》http://blog.csdn.net/pongba/archive/2007/12/11/1930150.aspx&lt;br /&gt;可以发现他们都倾向于这样一种个人觉得并不很好的方式：列书单。&lt;/p&gt;&lt;p&gt;我在《漫谈C语言及如何学习C语言》也列书单，但不仅仅列书单。一个初学者光靠看书，只能完成学习过程中30%甚至更少的进度。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;想学好C++，能真正把C++用起来，必须要读、写、看、说多种手段多种方法结合使用。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;另外我个人对C++的态度，就是不要学习使用它的全部，把它的基础部分掌握了就好，足够用了。比如模板元编程这种高级话题，初学者不要牵扯过多，以免一叶障目不见泰山。学编程是干嘛的？如果是为了使用，那就学最核心最基本的那些好了。&lt;/p&gt;&lt;p&gt;在你学习C++之前，先明确自己的目的，为什么要学C++？为什么要用C++？可能是大学老师要你学，可能是公司开发项目需要你学。如果没有目的没有需求，不要用学习C++来折磨自己了，学点英语，学点Python编程都比学C++好玩有用多了。&lt;/p&gt;&lt;p&gt;学习C++之间，还需要准备一下练习环境。我这里偷一下懒，在《漫谈C语言及如何学习C语言》&lt;a href="http://sunxiunan.com/?p=1661"&gt;http://sunxiunan.com/?p=1661&lt;/a&gt; 这里提到的开发工具全都支持C++开发，所以你在里面选择一个安装就可以了。在Windows下开发，我建议大家安装VC2010和SP1（怎么搞到？别问我，问迅雷吧），新版本虽然有些慢，但是支持Win7操作系统，对C++标准支持更好。不是像有些人说的2003到2010没啥变化，这种人估计从来不看release note吧？！至于VC6，还是抛弃了吧。&lt;/p&gt;&lt;p&gt;还有一点想罗嗦一下，C++最好不要作为你的第一门编程语言，选择C语言更适合。首先是你在C语言中学到的东西，基本上在C++都可以用，包括一直遭人唾骂的MACRO宏。另外C语言入门级好书很多。而C++入门级好书不好选。如何学习C语言，看我《漫谈C语言及如何学习C语言》吧，用心点的话，大概需要半年到一年时间就足够了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第一阶段，读书。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;建议大家先一次买齐下面5本书，其他书籍不对初学者推荐：&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;stanly lippman的《C++ Primer》&lt;br /&gt;《Effective C++:改善程序与设计的55个具体做法:第3版 》&lt;br /&gt;《C++标准程序库&amp;mdash;自修教程与参考手册》侯捷孟岩翻译&lt;br /&gt;《More Effective C++：35个改善编程与设计的有效方法(中文版)》&lt;br /&gt;《C++编程规范:101条规则、准则与最佳实践》&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;第一本书非常难选，我这里建议几个候选者，读者可以到书店去翻看一下，哪一本觉得合口味就用哪一本。&lt;/p&gt;&lt;p&gt;候选者A，钱能老师的《C++程序设计教程(修订版)&amp;ndash;设计思想与实现 》 http://product.china-pub.com/46574&lt;br /&gt;我上学的时候，翻过钱能写的C++书，感觉还不错。至于这一本实话实话我没看过，但是按照国人教学风格应该是一板一眼的。&lt;/p&gt;&lt;p&gt;候选者B，stanly lippman的《essential C++》，这本书我有，但是感觉不适合作为初学者使用，如果你有一两年编程经验，看看这本书也许还行。&lt;/p&gt;&lt;p&gt;候选者C，&lt;strong&gt;stanly lippman的《C++ Primer》&lt;/strong&gt;，基本上用这本书入门，应该是比较花费时间的，但也很正统，这本书买了肯定不白瞎。&lt;/p&gt;&lt;p&gt;我推荐A+C，或者你到图书馆选择随便选一本《C++设计教程》作为A的替代，先知道一下皮毛。&lt;/p&gt;&lt;p&gt;初学者阶段需要注意的是，每看完一段，都（必须的！）要自己做做上机实验，把章节后面的练习，文章中的代码示例，自己动手把程序敲进去，编译一下，运行起来，调试调试。这一步非常重要，如果你做不到，那就学不好。&lt;/p&gt;&lt;p&gt;至于IDE如何调试，如何设置断点，如何建立、配置项目，不属于这篇文字范畴，但有问题的话，欢迎留言，我会尽量解答。&lt;/p&gt;&lt;p&gt;C++包含几个方面范式，一个是传统的结构化编程，一个是面向对象程序设计，一个是基于模板编程，还有就是STL标准模板库的使用。&lt;/p&gt;&lt;p&gt;读者可以按部就班，先学习结构化编程，主要掌握基本的程序语法、关键字、数据结构，比如const的使用，4种xxx_cast概念等等。&lt;/p&gt;&lt;p&gt;面向对象编程，要数量掌握class、new、delete，对象（资源）管理，对象生命周期，构造、析构、拷贝构造、拷贝赋值这些与对象实例相关的内容，了解一下多态、继承、重载、覆盖、operator重载这些内容。另外简单了解一下多重继承、异常处理机制等等概念。写写例子实现一下，其实都不难理解。&lt;/p&gt;&lt;p&gt;模板方面的内容，不要挖的太深，了解并且实验一下如何定义模板类模板函数偏特化这些基本知识就够了。我可能用的比较浅，但是我八年工作经历来看，模板的内容属于不常使用的。&lt;/p&gt;&lt;p&gt;STL方面，掌握几个基本的类型比如vector、list、map、set、string，了解一些基本算法，比如find之类，基本上工作就足够了。&lt;/p&gt;&lt;p&gt;在这里要推荐第二本C++必须有的书籍&lt;strong&gt;《C++标准程序库&amp;mdash;自修教程与参考手册》侯捷孟岩翻译&lt;/strong&gt;。这是一本必须放在手边的书籍，因为MSDN关于STL的内容写得真是太烂了，比其它内容差的太多太多。前面介绍的STL，有了这本书在一边辅助，有问题一查便知。&lt;/p&gt;&lt;p&gt;我一直在提的就是了解基本就足够了。没错！对于初学者而言，千万不要想着什么都学什么都会。C++的内容太多陷阱重重，什么都想知道，只能是胡子眉毛一把抓。抓主干抓基本抓核心，对我提到的内容，注意不同的层次：掌握、熟悉、了解，这些内容多看看，其它的碰到了在深入学习。&lt;/p&gt;&lt;p&gt;C++第三方library，比如boost，如果没有必要，不建议大家学习和使用在自己的项目中。当然也有例外，比如asio和boost-python都是最近风头很劲的库，做网络编程或者配合python的话，可以选择。&lt;/p&gt;&lt;p&gt;如果对于C++基本语法以及common knowledge有了认识了解，下面需要增加的就是工程实践设计方面的内容，基本上大家都推荐这几本，我也不例外。&lt;br /&gt;&lt;strong&gt;《Effective C++:改善程序与设计的55个具体做法:第3版 》&lt;br /&gt;《More Effective C++：35个改善编程与设计的有效方法(中文版)》&lt;br /&gt;《C++编程规范:101条规则、准则与最佳实践》&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这三本书的风格都是条目式，内容很实在，不玩虚的不炫技，里面的内容都可以立刻用在工程实践当中。&lt;/p&gt;&lt;p&gt;另外需要说明的是，纯粹C++知识对于实际编程工作是不够的，必须结合特定领域，比如Windows下编程你要知道SDK API，Linux编程你要知道常用的system call，数据库编程要知道一些如何连接查询更新的步骤。这些没法在这里一一介绍，可以咨询公司内的其他同事，或者留言给我好了。&lt;/p&gt;&lt;p&gt;看完这几本书，可能你对C++的了解已经上了一个台阶，这时候就不要继续死读书了，该动手做点什么了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第二阶段，写代码。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;书读百遍其义自现，代码写的多，bug就会多。开场诗念完就讲讲如何写代码。这其实是非常难的一步，有不少朋友书读了很多，但是就是写不出一行代码，或者写出来的还是非常奇怪充斥着低级错误的代码。这就是熟练度不够的缘故。&lt;/p&gt;&lt;p&gt;平时喝茶的时间拿出来，想想代码该如何设计；平时泡妞的时间拿出来，想想这个函数有没有更好的实现；看到winzip、迅雷、QQ，想想如果自己写该如何实现功能。不仅要想，还要动手做一做。&lt;/p&gt;&lt;p&gt;如果你是做Windows编程，这里推荐一下codeproject.com，这个网站上的项目设计了Windows开发的方方面面，比如GDI如何操作，数据库，控件菜单窗口消息循环等等，都比较短小精干，而且都包含了整个项目代码下载（而不仅仅是某个片段），下载以后编译调试一下，会对自己提高帮助很大。&lt;/p&gt;&lt;p&gt;现在坊间也有一些step by step的书籍，教你如何一步步实现某个功能，这种书可以根据书评销量选一本然后照着实践编程。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第三阶段，看高人编程。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这一步针对读者已经工作而且公司中有高手存在的情况。跟高手拉好关系，然后坐在一边看他编程，一般有些人不喜欢别人看，但是如果你表现出很仰慕的表情，问题应该不大。一般比较靠谱的软件公司对于新人都会指定一个导师，如果幸运的话，你就看你的导师如何编程好了。&lt;/p&gt;&lt;p&gt;其实这是学徒到大师中很关键的一步，有个词叫&amp;rdquo;传帮带&amp;ldquo;，就是师傅手把手的教。其实编程也是一门手艺，如果没看过师傅真实的工作状态，想变成高手要比较困难一些。&lt;/p&gt;&lt;p&gt;看高人编程看什么，看他如何写代码，如何思考，用了哪些工具、快捷键，遇到问题怎么调试怎么跟踪的？这些都是书本上很少见，但是工程实践中又非常有用的东西。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第四阶段，分享知识。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;自己水平够不够，一做分享就知道。&lt;/p&gt;&lt;p&gt;不少公司都会定期举行技术分享会这类活动，或者有些地方社区也会搞搞技术分享。如果你觉得自己学的差不多了，就试着把自己知道的讲出来，分享给其他人。&lt;/p&gt;&lt;p&gt;这样做有几个好处，一个是增加你对知识的了解。我做过不少ppt，当自己想说点什么的时候才知道自己有多深浅哪个地方还欠缺，这个办法万试万灵。在问答环节，你还可以与其他人互动，其他人的问题未必你都懂，这时候就可以继续深入学习。另外可以增加你自己的技术知名度，是一个很好的广告效应。&lt;/p&gt;&lt;p&gt;如果没有类似的技术分享怎么办？&lt;/p&gt;&lt;p&gt;我建议读者注册一个stackoverflow.com的账号，到那里去回答问题，一样也是非常好的分享方式。&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/2000786.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/03/31/2000786.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/03/24/1993523.html</id><title type="text">个人常用的免费iPad app软件(个人风格突出且不需越狱)</title><summary type="text">我的iPad系统是iOS4.3没有越狱，推荐下面这些免费软件给各位iPad玩家。这些软件都是通过美国app store下载来的，不用信用卡注册一个美国app store其实很简单，就是购买一个free的软件就行了。某些情况下也许需要翻墙。下面推荐的软件都是免费的，在app store中可以搜索名字找到下载。不需要越狱也不需要破解，基本上已经满足了我日常需求。先说说我觉得应该有但是现在还不够好（或者我还不知道的）软件：1）浏览器，safari无法浏览桌面版google reader，太惨了，是我最不可容忍的。Firefox或者Chrome有iOS版本么？或者有什么软件浏览google reade</summary><published>2011-03-24T02:43:00Z</published><updated>2011-03-24T02:43:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/03/24/1993523.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/03/24/1993523.html"/><content type="html">&lt;p&gt;我的iPad系统是iOS4.3没有越狱，推荐下面这些免费软件给各位iPad玩家。&lt;/p&gt;&lt;p&gt;这些软件都是通过美国app store下载来的，不用信用卡注册一个美国app store其实很简单，就是购买一个free的软件就行了。某些情况下也许需要翻墙。&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;下面推荐的软件都是免费的，在app store中可以搜索名字找到下载。不需要越狱也不需要破解，基本上已经满足了我日常需求。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;先说说我觉得应该有但是现在还不够好（或者我还不知道的）软件：&lt;/p&gt;&lt;p&gt;1）浏览器，safari无法浏览桌面版google reader，太惨了，是我最不可容忍的。Firefox或者Chrome有iOS版本么？或者有什么软件浏览google reader比较像是正常浏览器的？&lt;/p&gt;&lt;p&gt;2）pdf阅读软件，我想要的pdf阅读器其实就需要两个功能，一个是固定缩放比例，一个是固定缩放view或者说是切白边的功能，Apabi可以切白边，但是不能固定缩放。而且我也不喜欢翻页模式，如果能做成电脑上那种pdf连续阅读模式就更好了，为什么非要模拟实体书阅读呢？这些程序设计者其实也进入一个误区。当然也可以买ibook或者kindle，那是另外一个事情了。&lt;/p&gt;&lt;p&gt;3）游戏方面，没有特别好玩的，操作感以及游戏大作各方面比较，都比psp差多了，这让我也感到很欣慰，psp不需要下岗。至于愤怒的小鸟，其实不很好玩。玩游戏还是需要有手柄才有感觉。&lt;/p&gt;&lt;p&gt;我推荐的这些软件主要分几大类，下面让我一一道来：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;编程技术相关&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;推荐软件就是一个Zite。由于没有碰到好的RSS阅读软件，或者有些软件（比如MobileRSS之类）的阅读习惯与google reader差别太大，基本不推荐。&lt;/p&gt;&lt;p&gt;&lt;a href="http://itunes.apple.com/us/app/zite/id419752338?mt=8&amp;amp;ls=1"&gt;http://itunes.apple.com/us/app/zite/id419752338?mt=8&amp;amp;ls=1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Zite这个软件号称是可以学习你的阅读习惯，进入软件以后可以先定制自己喜欢的频道，或者加上自己感兴趣的tag keyword，不过要注意这些tag关键字都是Zite预置的，现在还不存在你自己添加个新关键字的可能。&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0005.png"&gt;&lt;img height="1024" width="768" src="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0005.png" title="IMG_0005" class="aligncenter size-full wp-image-1810" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在文章阅读页面，可以选择&amp;rdquo;喜欢&amp;ldquo;&amp;rdquo;不喜欢&amp;ldquo;，或者&amp;ldquo;一直给我推荐这个网站文章&amp;rdquo;&amp;ldquo;分享到twitter/FB/Email"等等功能。所谓能自我学习，也就是从读者不断地点击喜欢不喜欢来计算权值，进行文章推荐的吧。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0006.png"&gt;&lt;img height="1024" width="768" src="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0006.png" title="IMG_0006" class="aligncenter size-full wp-image-1811" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;由于没有VPN，所以只能把自己喜欢的文章用email发给自己。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;英语、时事相关&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;推荐《The Economist》《usa today》《nytimes》《CNN》《NPR》。&amp;nbsp;&lt;/p&gt;&lt;p&gt;免费版的经济学人《The Economist》只能看到&amp;ldquo;Editor' s highlights"，但是基本上也足够了，因为不像是技术文章那么容易看懂。另外&amp;rdquo;经济学人&amp;ldquo;还可以下载音频&lt;/p&gt;&lt;p&gt;收听，选择右上角的耳机图标就可以了。&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0002.png"&gt;&lt;img height="1024" width="768" src="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0002.png" title="IMG_0002" class="aligncenter size-full wp-image-1812" style="float: left;" /&gt;&lt;/a&gt;&lt;a href="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0004.png"&gt;&lt;img height="1024" width="768" src="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0004.png" title="IMG_0004" class="aligncenter size-full wp-image-1813" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;在通过听看新闻学英语的这些资源中，比较推荐&amp;rdquo;CNN&amp;ldquo;和&amp;rdquo;NPR&amp;ldquo;，因为他们几乎所有的音视频都有脚本字幕（transcript），如果遇到看不懂听不懂的，看看脚本就可以了。&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0007.png"&gt;&lt;img height="1024" width="768" src="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0007.png" title="IMG_0007" class="aligncenter size-full wp-image-1814" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;杂项新闻相关&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;推荐iWeekly周末画报，Zaker，Flipboard。&lt;/p&gt;&lt;p&gt;其中周末画报相对制作比较精美，而Zaker由于来源比较混杂，排版不是很好看，有了Zite以后，基本上就不用Zaker了。&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0008.png"&gt;&lt;img height="1024" width="768" src="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0008.png" title="IMG_0008" class="aligncenter size-full wp-image-1815" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;游戏相关&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;推荐TradeNations。&lt;/p&gt;&lt;p&gt;除了切水果，跳跃忍者，愤怒的小鸟这一类大家总所周知的游戏，TradeNations算是一个社交加农场养成类的游戏，你可以加好友，然后到好友的农场里进行交易，买花买家具买衣服等等，这个游戏是tinyfool在twitter上推荐，还真是挺好玩，每天稍微打理一下就可以了，如果你也玩了这个游戏，欢迎加我的账号sagasw。&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0009.png"&gt;&lt;img height="1024" width="768" src="http://sunxiunan.com/wp-content/uploads/2011/03/IMG_0009.png" title="IMG_0009" class="aligncenter size-full wp-image-1817" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;读书相关&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;推荐CloudReader，Stanza，Apabi Reader（方正阅读器），ibook，kindle。&lt;/p&gt;&lt;p&gt;没有特别出色的，相比来说Apabi特点突出一些，但也不是很好用。基本上ibook，kindle，Apabi阅读pdf都属于残废。但是我已经想到一个用ipad阅读pdf的方法，正在研究中。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;免费、限期免费相关&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;推荐&amp;rdquo;app每日推送&amp;ldquo;以及&amp;rdquo;软件游戏猎手&amp;ldquo;这两款。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/1993523.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/03/24/1993523.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/02/23/1963314.html</id><title type="text">高级软件工程师面试问题 Interview SeniorSoftwareEngineers</title><summary type="text">hanselman这篇文章很有意思，尽管不是每个问题都很值得作为面试问题出现，但是很多都值得去仔细想想。一个优秀的面试问题，尤其是针对Senior Engineer的面试问题，不应该仅仅是问某个api的用法，某个很容易从帮助中找到的内容。有发散性，可以基于问题进行扩展的问题才是一个比较好的问题。下面是一个非常长的问题列表，主要是关于面向对象设计，设计模式，以及一些实际工程中会用到概念，都是比较基本的，但是也非常能考察一个高级工程师的水平，因为会牵涉到非常多方面。另外要说明的是下面很多概念性问题可以直接从wiki维基百科上找到答案。另外我会标记出个人觉得比较值得问的问题。原文在这里 http:/</summary><published>2011-02-23T15:35:00Z</published><updated>2011-02-23T15:35:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/02/23/1963314.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/02/23/1963314.html"/><content type="html">&lt;div class="post"&gt;&lt;p&gt;hanselman这篇文章很有意思，尽管不是每个问题都很值得作为面试问题出现，但是很多都值得去仔细想想。&lt;/p&gt;&lt;p&gt;一个优秀的面试问题，尤其是针对Senior Engineer的面试问题，不应该仅仅是问某个api的用法，某个很容易从帮助中找到的内容。有发散性，可以基于问题进行扩展的问题才是一个比较好的问题。&lt;/p&gt;&lt;p&gt;下面是一个非常长的问题列表，主要是关于面向对象设计，设计模式，以及一些实际工程中会用到概念，都是比较基本的，但是也非常能考察一个高级工程师的水平，因为会牵涉到非常多方面。&lt;/p&gt;&lt;p&gt;另外要说明的是下面很多概念性问题可以直接从wiki维基百科上找到答案。另外我会标记出个人觉得比较值得问的问题。&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/NewInterviewQuestionsForSeniorSoftwareEngineers.aspx"&gt;原文在这里 http://www.hanselman.com/blog/NewInterviewQuestionsForSeniorSoftwareEngineers.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# What is something substantive that you&amp;rsquo;ve done to improve as a developer in your career?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;有没有做过什么比较实质性的事情来提升你的程序员职业水平？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好问题。我的回答：这个很难说，我的做法是坚持学习，坚持写技术类博客。另外有些经验在这里提到过&lt;a href="http://sunxiunan.com/?p=1799"&gt;http://sunxiunan.com/?p=1799&lt;/a&gt;&lt;/p&gt;&lt;p&gt;# Would you call yourself a craftsman (craftsperson) and what does that word mean to you?&lt;/p&gt;&lt;p&gt;不敢叫自己大师啊，那得多牛逼？！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Implement a &amp;lt;basic data structure&amp;gt; using &amp;lt;some language&amp;gt; on &amp;lt;paper|whiteboard|notepad&amp;gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;用某种语言在纸面上实现一个基本的数据结构。(用近似真实格式的伪代码来表达?)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好问题。我的回答，找一本基础的数据结构书籍吧，比如这一本《数据结构与算法分析：C语言描述（原书第2版）》&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# What is SOLID? &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;参考http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;这个solid不是说&amp;ldquo;结实的&amp;rdquo;，而是面向对象五大原则的简称：单一责任原则，开闭原则，莱西科夫替换原则，接口分离原则，依赖倒置原则。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好问题。&lt;strong&gt;这几个原则的确应该背下来，太基础了。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Why is the Single Responsibility Principle important?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;为什么单一责任原则重要？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好问题。我的回答，因为职责明确，设计就不容易混乱，即使有后续变化也是可控的。&lt;/p&gt;&lt;p&gt;# What is Inversion of Control? How does that relate to dependency injection?&lt;/p&gt;&lt;p&gt;参考http://en.wikipedia.org/wiki/Inversion_of_control&lt;/p&gt;&lt;p&gt;实际中的例子，通知开会，一种可以打电话通知到每个人（这属于中心控制型的，必须有个controller/manager之类的）；也可张贴一个告示，大家自己来看，这属于事件响应型的。&lt;/p&gt;&lt;p&gt;# How does a 3 tier application differ from a 2 tier one?&lt;/p&gt;&lt;p&gt;三层应用与两层应用的区别是什么？&lt;/p&gt;&lt;p&gt;我只知道MVC三层应用。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Why are interfaces important?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;为什么接口重要？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好问题。接口的重要在于消费者（客户端）不需要了解生产者（服务端）的细节，接口相当于合同，当合同不变的时候，谁生产如何生产都不是消费者关心的问题。&lt;/p&gt;&lt;p&gt;# What is the Repository pattern? The Factory Pattern? Why are patterns important?&lt;/p&gt;&lt;p&gt;关于设计模式的问题，&lt;/p&gt;&lt;p&gt;第一个参考http://msdn.microsoft.com/en-us/library/ff649690.aspx&lt;/p&gt;&lt;p&gt;工厂模式基本上是众人皆知的模式了。&lt;/p&gt;&lt;p&gt;为何模式重要？我不觉得模式重要，模式的重要性在于让你能&amp;ldquo;喔！原来是这个&amp;rdquo;。但是对于一个没有几年编程经验的开发者而言，模式只能让你更混乱。&lt;/p&gt;&lt;p&gt;设计模式很多情况下是通过加入一个抽象层来解决耦合之类的问题，但是层次越多越复杂，就好比单位中领导的级别越多越官僚一样。&lt;/p&gt;&lt;p&gt;# What are some examples of anti-patterns?&lt;/p&gt;&lt;p&gt;反模式？少用模式，多写点清晰的代码吧。&lt;/p&gt;&lt;p&gt;# Who are the Gang of Four? Why should you care?&lt;/p&gt;&lt;p&gt;四人组，名字叫不上来，但是他们是设计模式的总结者。&lt;/p&gt;&lt;p&gt;# How do the MVP, MVC, and MVVM patterns relate? When are they appropriate? &lt;/p&gt;&lt;p&gt;这也是微软特色，大家只要知道MVC就行了，其实大家现在用的都是MVC，但是由于水平高低，效果就是千差万别。&lt;/p&gt;&lt;p&gt;啥MVP，MVVM我不知啊（也不是不知，只知道MVVM是wpf的一个概念，可我也不用wpf啊）&lt;/p&gt;&lt;p&gt;# Explain the concept of Separation of Concerns and it&amp;rsquo;s pros and cons.&lt;/p&gt;&lt;p&gt;参考http://en.wikipedia.org/wiki/Separation_of_concerns&lt;/p&gt;&lt;p&gt;我也不是了解的很细。&lt;/p&gt;&lt;p&gt;# Name three primary attributes of object-oriented design. Describe what they mean and why they&amp;rsquo;re important.&lt;/p&gt;&lt;p&gt;封装/继承/多态？&lt;/p&gt;&lt;p&gt;参考这里吧http://en.wikipedia.org/wiki/Object-oriented_programming&lt;/p&gt;&lt;p&gt;学C++这几个概念是基础啊&lt;/p&gt;&lt;p&gt;# Describe a pattern that is NOT the Factory Pattern? How is it used and when?&lt;/p&gt;&lt;p&gt;不是工厂模式，我知道个单件模式。还有模板模式/facade模式/strategy模式，具体也要翻翻书，很少有意识的套用。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# You have just been put in charge of a legacy code project with maintainability problems. What kind of things would you look to improve to get the project on a stable footing?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;第一步，先把代码用最大警告级别编译一遍，然后fix所有值得fix的warning。&lt;/p&gt;&lt;p&gt;好问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Show me a portfolio of all the applications you worked on, and tell me how you contributed to design them.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果光是看文档，很难说到实质上。&lt;/p&gt;&lt;p&gt;好问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# What are some alternate ways to store data other than a relational database? Why would you do that, and what are the trade-offs?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好问题，很多啦，内存/文件/云存储/nosql等等。tradeoff就看你的应用需求了。blabla。。。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Explain the concept of convention over configuration, and talk about an example of convention over configuration you have seen in the wild.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;好问题。&lt;/p&gt;&lt;p&gt;我能想到的就是买车开车，很少有人买到车以后，拿着说明书调试这个那个，一般都是直接上路，因为汽车厂会给你一个比较不错的默认配置，也就是所谓的&amp;ldquo;方便&amp;rdquo;。&lt;/p&gt;&lt;p&gt;这个方便也保证了你开其它车，基本上都差不多，不用重新配置或者学习什么。&lt;/p&gt;&lt;p&gt;所谓方便&amp;rdquo;convention&amp;ldquo;就是把相对不错/比较普遍适用的配置都内置好了，用就是了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Explain the differences between stateless and stateful systems, and impacts of state on parallelism.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;解释有状态与无状态系统，以及有状态系统在并行上的影响。&lt;/p&gt;&lt;p&gt;好问题。这个说不好。有状态系统因为保持状态，并发运行时的访问/修改需要有锁同步机制。&lt;/p&gt;&lt;p&gt;# Discuss the differences between Mocks and Stubs/Fakes and where you might use them (answers aren&amp;rsquo;t that important here, just the discussion that would ensue).&lt;/p&gt;&lt;p&gt;跟TDD相关的问题。不会哦。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Discuss the concept of YAGNI and explain something you did recently that adhered to this practice.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;解释&amp;ldquo;YAGNI&amp;rdquo;。&lt;/p&gt;&lt;p&gt;最简单的例子是当我们定义接口，会特意预留出一两个参数，说是为了将来使用，其实，没有将来。屁嘞！你根本不需要它！&lt;/p&gt;&lt;p&gt;不是说不考虑可扩展性，但是要基于可预测的基础上。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Explain what is meant by a sandbox, why you would use one, and identify examples of sandboxes in the wild.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;比如把虚拟机比如vmware virtualbox作为沙箱，用起来可以隔离风险。大不了重启，或者删除之。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Concurrency&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;    * What&amp;rsquo;s the difference between Locking and Lockless (Optimistic and Pessimistic) concurrency models?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;    * What kinds of problems can you hit with locking model? And a lockless model?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;    * What trade offs do you have for resource contention?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;    * How might a task-based model differ from a threaded model?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;    * What&amp;rsquo;s the difference between asynchrony and concurrency?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这些问题不错。并发相关的问题，设计多用户高性能系统必知。&lt;/p&gt;&lt;p&gt;# Are you still writing code? Do you love it?&lt;/p&gt;&lt;p&gt;我喜欢编程。&lt;/p&gt;&lt;p&gt;# You&amp;rsquo;ve just been assigned to a project in a new technology how would you get started?&lt;/p&gt;&lt;p&gt;如果是我，先了解这个技术的风险。小心求证，尽量缩小使用范围，否则是很致命的。&lt;/p&gt;&lt;p&gt;# How does the addition of Service Orientation change systems? When is it appropriate to use?&lt;/p&gt;&lt;p&gt;不懂。&lt;/p&gt;&lt;p&gt;# What do you do to stay abreast of the latest technologies and tools?&lt;/p&gt;&lt;p&gt;我跟的很紧哦！&lt;/p&gt;&lt;p&gt;# What is the difference between "set" logic, and "procedural" logic. When would you use each one and why?&lt;/p&gt;&lt;p&gt;不懂要问什么。&lt;/p&gt;&lt;p&gt;# What Source Control systems have you worked with?&lt;/p&gt;&lt;p&gt;ClearCase.很难用。最近不少问题都是跟CC相关的。&lt;/p&gt;&lt;p&gt;# What is Continuous Integration?  Have you used it and why is it important?&lt;/p&gt;&lt;p&gt;持续集成。这个概念跟TDD也挂钩。&lt;/p&gt;&lt;p&gt;# Describe a software development life cycle that you&amp;rsquo;ve managed.&lt;/p&gt;&lt;p&gt;涉及的还是传统模型，不是scrum型的。&lt;/p&gt;&lt;p&gt;# How do you react to people criticizing your code/documents?&lt;/p&gt;&lt;p&gt;批评没问题，但是要有道理有根据。&lt;/p&gt;&lt;p&gt;# Whose blogs or podcasts do you follow? Do you blog or podcast?&lt;/p&gt;&lt;p&gt;这就很多了，看我以前写的文章吧。&lt;/p&gt;&lt;p&gt;# Tell me about some of your hobby projects that you&amp;rsquo;ve written in your off time.&lt;/p&gt;&lt;p&gt;主要是Lua和Py的，appengine上的比较多。&lt;/p&gt;&lt;p&gt;# What is the last programming book you read?&lt;/p&gt;&lt;p&gt;最近看得是《C++ FAQs》中文版。翻译的一般，内容也比较陈旧。更坚定了我使用C风格的C++的决心。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Describe, in as much detail as you think is relevant, as deeply as you can, what happens when I type "cnn.com" into a browser and press "Go".&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;尽可能详细深入的描述，当你在浏览器敲网址然后go后面的技术细节。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;好问题。很发散，绝对能看出面试者的技术厚度。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;# Describe the structure and contents of a design document, or a set of design documents, for a multi-tiered web application.&lt;/p&gt;&lt;p&gt;# What&amp;rsquo;s so great about &amp;lt;cool web technology of the day&amp;gt;?&lt;/p&gt;&lt;p&gt;# How can you stop your DBA from making off with a list of your users&amp;rsquo; passwords?&lt;/p&gt;&lt;p&gt;# What do you do when you get stuck with a problem you can&amp;rsquo;t solve?&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/?p=961"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;参考这里计算机编程新人入行指导&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/?p=961"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;http://sunxiunan.com/?p=961&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;# If your database was under a lot of strain, what are the first few things you might consider to speed it up?&lt;/p&gt;&lt;p&gt;先profiling哦！&lt;/p&gt;&lt;p&gt;# What is SQL injection?&lt;/p&gt;&lt;p&gt;# What&amp;rsquo;s the difference between unit test and integration test?&lt;/p&gt;&lt;p&gt;单元测试应该是程序员做。集成测试就牵扯到tester了。&lt;/p&gt;&lt;p&gt;# Tell me about 3 times you failed.&lt;/p&gt;&lt;p&gt;# What is Refactoring ? Have you used it and it is important? Name three common refactorings.&lt;/p&gt;&lt;p&gt;我一直在重构自己的代码。重构原则参考这里&lt;/p&gt;&lt;p&gt;&lt;a href="http://sunxiunan.com/?p=1787"&gt;C++项目代码规范（偶自用）&lt;/a&gt;http://sunxiunan.com/?p=1787&lt;/p&gt;&lt;p&gt;# You have two computers, and you want to get data from one to the other. How could you do it?&lt;/p&gt;&lt;p&gt;命名管道，socket，共享文件夹，路子还是很多的。&lt;/p&gt;&lt;p&gt;# Left to your own devices, what would you create?&lt;/p&gt;&lt;p&gt;&lt;strong&gt;# Given Time, Cost, Client satisfaction and Best Practices, how will you prioritize them for a project you are working on? Explain why.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;这个很值得问。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;# What&amp;rsquo;s the difference between a web server, web farm and web garden? How would your web application need to change for each?&lt;/p&gt;&lt;p&gt;# What value do daily builds, automated testing, and peer reviews add to a project? What disadvantages are there?&lt;/p&gt;&lt;p&gt;都是为了提升代码质量，但是会延长工期。&lt;/p&gt;&lt;p&gt;# What elements of OO design are most prone to abuse? How would you mitigate that?&lt;/p&gt;&lt;p&gt;# When do you know your code is ready for production?&lt;/p&gt;&lt;p&gt;看bug fix的统计曲线。&lt;/p&gt;&lt;/div&gt;﻿&lt;img src="http://www.cnblogs.com/lua5/aggbug/1963314.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/02/23/1963314.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lua5/archive/2011/02/01/1948760.html</id><title type="text">理解Node.js事件驱动编程</title><summary type="text">Node.js现在非常活跃，相关生态社区已经超过Lua（基本上比较知名的功能都有nodejs模块实现）。但是我们为何要使用Node.Js？相比传统的webserver服务模式，nodejs有什么优点优势？Node.Js是基于javascript语言，建构在google V8 engine以及Linux上的一个非阻塞事件驱动IO框架。nodejs是单进程单线程，但是基于V8的强大驱动力，以及事件驱动模型，nodejs的性能非常高，而且想达到多核或者多进程也不是很难（现在已经有大量的第三方module来实现这个功能）。这里主要不是介绍nodejs具体应用代码，而是想介绍一下事件驱动编程。在这篇文章</summary><published>2011-02-01T10:43:00Z</published><updated>2011-02-01T10:43:00Z</updated><author><name>林志玲</name><uri>http://www.cnblogs.com/lua5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lua5/archive/2011/02/01/1948760.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lua5/archive/2011/02/01/1948760.html"/><content type="html">&lt;p&gt;Node.js现在非常活跃，相关生态社区已经超过Lua（基本上比较知名的功能都有nodejs模块实现）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;但是我们为何要使用Node.Js？相比传统的webserver服务模式，nodejs有什么优点优势？&lt;/p&gt;&lt;p&gt;&lt;img src="http://min.us/jbVcrs.bmp" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Node.Js是基于javascript语言，建构在google V8 engine以及Linux上的一个非阻塞事件驱动IO框架。nodejs是单进程单线程，但是基于V8的强大驱动力，以及事件驱动模型，nodejs的性能非常高，而且想达到多核或者多进程也不是很难（现在已经有大量的第三方module来实现这个功能）。&lt;/p&gt;&lt;p&gt;这里主要不是介绍nodejs具体应用代码，而是想介绍一下事件驱动编程。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在这篇文章（1）里面，Dan York介绍了两种典型的事件驱动实例。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第一个例子是关于医生看病。&lt;/p&gt;&lt;p&gt;在美国去看医生，需要填写大量表格，比如保险、个人信息之类，传统的基于线程的系统（thread-based system），接待员叫到你，你需要在前台填写完成这些表格，你站着填单，而接待员坐着看你填单。&lt;strong&gt;你让接待员没办法接待下一个客户，除非完成你的业务&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;想让这个系统能运行的快一些，只有多加几个接待员，人力成本需要增加不少。&lt;/p&gt;&lt;p&gt;基于事件的系统（event-based system）中，当你到窗口发现需要填写一些额外的表格而不仅仅是挂个号，接待员把表格和笔给你，告诉你可以找个座位填写，填完了以后再回去找他。你回去坐着填表，而接待员开始接待下一个客户。&lt;strong&gt;你没有阻塞接待员的服务&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;你填完表格，返回队伍中，等接待员接待完现在的客户，你把表格递给他。如果有什么问题或者需要填写额外的表格，他给你一份新的，然后重复这个过程。&lt;/p&gt;&lt;p&gt;这个系统已经非常高效了，几乎大部分医生都是这么做的。如果等待的人太多，可以加入额外的接待员进行服务，但是肯定要比基于线程模式的少得多。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;第二个例子是快餐店点餐。&lt;/p&gt;&lt;p&gt;在基于线程的方式中（thread-based way）你到了柜台前，把你的点餐单给收银员或者给收银员直接点餐，然后等在那直到你要的食物准备好给你。收银员不能接待下一个人，除非你拿到食物离开。想接待更多的客户，容易！加更多的收银员！&lt;/p&gt;&lt;p&gt;当然，我们知道快餐店其实不是这样工作的。他们其实就是基于事件驱动方式，这样收银员更高效。只要你把点餐单给收银员，某个人已经开始准备你的食物，而同时收银员在进行收款，当你付完钱，你就站在一边而收银员已经开始接待下一个客户。在一些餐馆，甚至会给你一个号码，如果你的食物准备好了，就呼叫你的号码让你去柜台取。关键的一点是，你&lt;strong&gt;没有阻塞&lt;/strong&gt;下一个客户的订餐请求。你订餐的食物做好的事件会导致某个人做某个动作（某个服务员喊你的订单号码，你听到你的号码被喊到去取食物），在编程领域，我们称这个为回调（callback function）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Node.Js做了什么工作呢？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;传统的web server多为基于线程模型。你启动Apache或者什么server，它开始等待接受连接。当收到一个连接，server保持连接连通直到页面或者什么事务请求完成。如果他需要花几微妙时间去读取磁盘或者访问数据库，web server就阻塞了IO操作（这也被称之为阻塞式IO).想提高这样的web server的性能就只有启动更多的server实例。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;相反的，Node.Js使用事件驱动模型，当web server接收到请求，就把它关闭然后进行处理，然后去服务下一个web请求。当这个请求完成，它被放回处理队列，当到达队列开头，这个结果被返回给用户。这个模型非常高效可扩展性非常强，因为webserver一直接受请求而不等待任何读写操作。（这也被称之为非阻塞式IO或者事件驱动IO）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;考虑下面这个过程：&lt;/p&gt;&lt;p&gt;1，你用浏览器访问nodejs服务器上的"/about.html"&lt;/p&gt;&lt;p&gt;2，nodejs服务器接收到你的请求，调用一个函数从磁盘上读取这个文件。&lt;/p&gt;&lt;p&gt;3，这段时间，nodejs webserver在服务后续的web请求。&lt;/p&gt;&lt;p&gt;4，当文件读取完毕，有一个回调函数被插入到nodejs的服务队列中。&lt;/p&gt;&lt;p&gt;5，nodejs webserver运行这个函数，实际上就是渲染（render）了about.html页面返回给你的浏览器。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好像就节省了几微秒时间，但是这很重要！特别是对于需要相应大量用户的web server。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这也就是为什么Node.Js这么热这么惹人关注。而且它还使用了一个非常通用的编程语言Javascript，也让开发者可以快速容易的编写高可扩展性服务器。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;(1) &lt;a title="http://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/" href="http://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/"&gt;http://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lua5/aggbug/1948760.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lua5/archive/2011/02/01/1948760.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
