程序员常用的十段代码片段

 如果你是一个C#程序员,那么本文介绍的10个C#常用代码片段一定会给你带来帮助,从底层的资源操作,到上层的UI应用,这些代码也许能给你的开发节省不少时间。以下是原文:
1 读取操作系统和CLR的版本
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    OperatingSystem os = System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Environment</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.OSVersion</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Platform: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Platform</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Service Pack: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.ServicePack</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Version: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Version</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“VersionString: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, os<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.VersionString</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">CLR</span> Version: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Environment</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Version</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

  在我的Windows 7系统中,输出以下信息: 
  

<code class="language-C# hljs mathematica has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    Platform: Win32NT 
    Service Pack: 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Version</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.7600</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> 
    VersionString: Microsoft Windows NT <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.7600</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> 
    CLR <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Version</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4.0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.21006</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
2 读取CPU数量,内存容量

  可以通过Windows Management Instrumentation (WMI)提供的接口读取所需要的信息。

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> UInt32 <span class="hljs-title" style="box-sizing: border-box;">CountPhysicalProcessors</span>() 
    { 
         ManagementObjectSearcher objects = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ManagementObjectSearcher( 
            “SELECT * FROM Win32_ComputerSystem”); 
         ManagementObjectCollection coll = objects.Get(); 
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span>(ManagementObject obj <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> coll) 
        { 
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> (UInt32)obj[“NumberOfProcessors”]; 
        } 
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; 
    } 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> UInt64 <span class="hljs-title" style="box-sizing: border-box;">CountPhysicalMemory</span>() 
    { 
       ManagementObjectSearcher objects =<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ManagementObjectSearcher( 
          “SELECT * FROM Win32_PhysicalMemory”); 
       ManagementObjectCollection coll = objects.Get(); 
       UInt64 total = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; 
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span> (ManagementObject obj <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> coll) 
       { 
           total += (UInt64)obj[“Capacity”]; 
        } 
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> total; 
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>

  请添加对程序集System.Management的引用,确保代码可以正确编译。

<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Machine: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.MachineName</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># of processors (logical): {0}”, Environment.ProcessorCount); </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># of processors (physical): {0}”  CountPhysicalProcessors()); </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“RAM installed: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0} bytes”,  CountPhysicalMemory())<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Is OS <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">64</span>-bit? {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,   Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Is</span>64BitOperatingSystem)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Is process <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">64</span>-bit? {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,  Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Is</span>64BitProcess)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Little-endian: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, BitConverter<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.IsLittleEndian</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    foreach (Screen screen <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span>  System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Windows</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Forms</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Screen</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.AllScreens</span>) 
    { 
         Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Screen {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.DeviceName</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
         Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tPrimary {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Primary</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
         Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tBounds: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Bounds</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
         Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tWorking Area: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WorkingArea</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
         Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“\tBitsPerPixel: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,screen<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.BitsPerPixel</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>
3 读取注册表键值对
<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    using (RegistryKey keyRun = Registry<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.LocalMachine</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.OpenSubKey</span>(@”Software\Microsoft\Windows\CurrentVersion\Run”)) 
    { 
        foreach (string valueName <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> keyRun<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.GetValueNames</span>()) 
        { 
         Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Name: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}\tValue: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>}”, valueName, keyRun<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.GetValue</span>(valueName))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
        } 
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>

  请添加命名空间Microsoft.Win32,以确保上面的代码可以编译。 
  

4 启动,停止Windows服务

  这项API提供的实用功能常常用来管理应用程序中的服务,而不必到控制面板的管理服务中进行操作。

<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    ServiceController controller = new ServiceController(“e-M-POWER”)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;      </span>
    controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Start</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;      </span>
    if (controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.CanPauseAndContinue</span>)      
    {      
        controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Pause</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;      </span>
        controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Continue</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;      </span>
    }      
    controller<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stop</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

  .net提供的API中,可以实现一句话安装与卸载服务

<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (args[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>] == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/i"</span>) 
    { 
           ManagedInstallerClass.InstallHelper(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span>[] { Assembly.GetExecutingAssembly().Location }); 
    } 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (args[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>] == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/u"</span>) 
    { 
       ManagedInstallerClass.InstallHelper(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span>[] { <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/u"</span>, Assembly.GetExecutingAssembly().Location }); 
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

  如代码所示,给应用程序传入i或u参数,以表示是卸载或是安装程序。 
  

5 验证程序是否有strong name (P/Invoke)

  比如在程序中,为了验证程序集是否有签名,可调用如下方法:

<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    [DllImport(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mscoree.dll"</span>, CharSet=CharSet.Unicode)] 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extern</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> StrongNameSignatureVerificationEx(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> wszFilePath, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> fForceVerification, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ref</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> pfWasVerified); 

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> notForced = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>; 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> verified = StrongNameSignatureVerificationEx(assembly, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">ref</span> notForced); 
    Console.WriteLine(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Verified: {0}\nForced: {1}"</span>, verified, !notForced); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

  这个功能常用在软件保护方法,可用来验证签名的组件。即使你的签名被人去掉,或是所有程序集的签名都被去除,只要程序中有这一项调用代码,则可以停止程序运行。 
  

6 响应系统配置项的变更

  比如我们锁定系统后,如果QQ没有退出,则它会显示了忙碌状态。

  请添加命名空间Microsoft.Win32,然后对注册下面的事件。

  . DisplaySettingsChanged (包含Changing) 显示设置

  . InstalledFontsChanged 字体变化

  . PaletteChanged

  . PowerModeChanged 电源状态

  . SessionEnded (用户正在登出或是会话结束)

  . SessionSwitch (变更当前用户)

  . TimeChanged 时间改变

  . UserPreferenceChanged (用户偏号 包含Changing)

  我们的ERP系统,会监测系统时间是否改变,如果将时间调整后ERP许可文件之外的范围,会导致ERP软件不可用。 
  

7 运用Windows7的新特性

  Windows7系统引入一些新特性,比如打开文件对话框,状态栏可显示当前任务的进度。

<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">Microsoft<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WindowsAPICodePack</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Dialogs</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.CommonOpenFileDialog</span> ofd =new Microsoft<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WindowsAPICodePack</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Dialogs</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.CommonOpenFileDialog</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.AddToMostRecentlyUsedList</span> = true<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.IsFolderPicker</span> = true<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.AllowNonFileSystemItems</span> = true<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
ofd<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.ShowDialog</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

  用这样的方法打开对话框,与BCL自带类库中的OpenFileDialog功能更多一些。不过只限于Windows 7系统中,所以要调用这段代码,还要检查操作系统的版本要大于6,并且添加对程序集Windows API Code Pack for Microsoft®.NET Framework的引用,请到这个地址下载http://code.msdn.microsoft.com/WindowsAPICodePack 
  

8 检查程序对内存的消耗

  用下面的方法,可以检查.NET给程序分配的内存数量:

<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> available = GC.GetTotalMemory(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>); 
    Console.WriteLine(“Before allocations: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0}”, available); 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> allocSize = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40000000</span>; 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[] bigArray = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">byte</span>[allocSize]; 
    available = GC.GetTotalMemory(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>); 
    Console.WriteLine(“After allocations: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0}”, available); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

  在我的系统中,它运行的结果如下所示:

<code class="language-C# hljs mathematica has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Before</span> allocations: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">651</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">064</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">After</span> allocations: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">690</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">080</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

  使用下面的方法,可以检查当前应用程序占用的内存:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    Process proc = Process<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.GetCurrentProcess</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Process Info: “+Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span>+ 
    “Private Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:N0}”+Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + 
    “Virtual Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + 
    “Working <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Set</span> Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + 
    “Paged Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + 
    “Paged System Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span> + 
      “Non-paged System Memory Size: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>:N0}” + Environment<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NewLine</span>, 
    proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.PrivateMemorySize</span>64,   proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.VirtualMemorySize</span>64,  proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WorkingSet</span>64,  proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.PagedMemorySize</span>64, proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.PagedSystemMemorySize</span>64,  proc<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.NonpagedSystemMemorySize</span>64 )<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>
9 使用记秒表检查程序运行时间

  如果你担忧某些代码非常耗费时间,可以用StopWatch来检查这段代码消耗的时间,如下面的代码所示:

<code class="language-C# hljs avrasm has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Diagnostics</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stopwatch</span> timer = new System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Diagnostics</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stopwatch</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Start</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Decimal total = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    int limit = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000000</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    for (int i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; i < limit; ++i) </span>
    { 
          total = total + (Decimal)Math<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Sqrt</span>(i)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    } 
    timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Stop</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Sum of sqrts: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”,total)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Elapsed milliseconds: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, 
    timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.ElapsedMilliseconds</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span>
    Console<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.WriteLine</span>(“Elapsed time: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, timer<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.Elapsed</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">; </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>

  现在已经有专门的工具来检测程序的运行时间,可以细化到每个方法,比如dotNetPerformance软件。

  以上面的代码为例子,您需要直接修改源代码,如果是用来测试程序,则有些不方便。请参考下面的例子。

<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    class AutoStopwatch : System.Diagnostics.Stopwatch, IDisposable 
    { 
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">AutoStopwatch</span>() 
       { 
           Start(); 
       } 
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">Dispose</span>() 
       { 
           Stop(); 
           Console.WriteLine(“Elapsed: {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>}”, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.Elapsed); 
       } 
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>

  借助于using语法,像下面的代码所示,可以检查一段代码的运行时间,并打印在控制台上。

<code class="language-C# hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> AutoStopwatch()) 
    { 
        Decimal total2 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; 
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> limit2 = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000000</span>; 
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i < limit2; ++i) 
        { 
           total2 = total2 + (Decimal)Math.Sqrt(i); 
        } 
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>
10 使用光标

  当程序正在后台运行保存或是册除操作时,应当将光标状态修改为忙碌。可使用下面的技巧。

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    class AutoWaitCursor : IDisposable 
    { 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Control _target; 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> Cursor _prevCursor = Cursors.Default; 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-title" style="box-sizing: border-box;">AutoWaitCursor</span>(Control control) 
    { 
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (control == <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) 
       { 
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">throw</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> ArgumentNullException(“control”); 
       } 
       _target = control; 
       _prevCursor = _target.Cursor; 
       _target.Cursor = Cursors.WaitCursor; 
    } 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">Dispose</span>() 
    { 
       _target.Cursor = _prevCursor; 
    } 
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>

  用法如下所示,这个写法,是为了预料到程序可能会抛出异常:

<code class="hljs r has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    using (new AutoWaitCursor(this)) 
    { 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span> 
    throw new Exception(); 
    } </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

 原文地址:http://blog.csdn.net/honantic/article/details/49337857

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值