((IDisposable)tmpObj2).Dispose(); } } }
21.P/Invoke是什么?
答:
在受控代码与非受控代码进行交互时会产生一个事务(transition) ,这通常发生在使用平台调用服务(Platform Invocation Services),即P/Invoke
如调用系统的 API 或与 COM 对象打交道,通过 System.Runtime.InteropServices 命名空间
虽然使用 Interop 非常方便,但据估计每次调用事务都要执行 10 到 40 条指令,算起来开销也不少,所以我们要尽量少调用事务
如果非用不可,建议本着一次调用执行多个动作,而不是多次调用每次只执行少量动作的原则
22.StringBuilder 和 String 的区别?
答:
String 虽然是一个引用类型,但在赋值操作时会产生一个新的对象,而 StringBuilder 则不会
所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String
示例:
using System; using System.Collections.Generic; using System.Text; namespace Example22 { class Program { static void Main(string[] args) { const int cycle = 100000; long vTickCount = Environment.TickCount; String str = null; for (int i = 0; i < cycle; i++) str += i.ToString(); Console.WriteLine("String: {0} MSEL", Environment.TickCount - vTickCount); vTickCount = Environment.TickCount; //看到这个变量名我就生气,奇怪为什么大家都使它呢? :) StringBuilder sb = new StringBuilder(); for (int i = 0; i < cycle; i++) sb.Append(i); Console.WriteLine("StringBuilder: {0} MSEL", Environment.TickCount - vTickCount); Console.ReadLine(); }
上一篇:Photoshop直观调节反转负冲效果
下一篇:Javascript实现的自动验证函数
|