知识大全 在.NET程序中正确使用String类型[1]
Posted 指令
篇首语:捐躯赴国难,视死忽如归。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在.NET程序中正确使用String类型[1]相关的知识,希望对你有一定的参考价值。
在.NET程序中正确使用String类型[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在实际程序中 String类型用得非常广泛 然而 由于 NET对String类型变量的独特管理方式 使用不当 会严重影响程序的性能 我们分几个方面来谈这个问题 了解String数据的内存分配方式 编写一个控制台应用程序 输入以下测试代码 class Programstatic void Main(string[] args)String s = a ;s = abcd ; 使用 NET Framework SDK提供的ildasm exe工具查看生成的MSIL指令 method private hidebysig static void Main(string[] args) cil managed entrypoint // 代码大小 ( xe) maxstack locals init ([ ] string s) IL_ : nop IL_ : ldstr a IL_ : stloc IL_ : ldstr abcd IL_ c: stloc IL_ d: ret // end of method Program::Main 简要解释一下上述MSIL指令代码 第 句给局部变量s分配一个索引号(索引号从 开始 如函数中有多个局部变量 其索引号按在函数中出现的顺序加一) 在编译时编译器会将代码中的两个字串 a 和 abcd 写入到程序集的元数据(metadata)中 此时 这两个字串被称为 字串字面量(string literal) 第 句使用ldstr指令为字串对象 a 分配内存 并将此对象引用压入到线程堆栈中 第 句使用stloc指令从线程堆栈顶弹出先前压入的对象引用 将其传给局部变量s(其索引号为 ) 同样的过程对 abcd 重复进行一次 所以这两句简单的代码 String s = a ;s = abcd ; 将会导致CLR使用ldstr指令分配两次内存 根据上述分析 读者一定明白了String变量的内容是只读的 给其赋不同的值将会导致内存的重新分配 因此 为提高程序性能 编程时应尽量减少内存的分配操作 下面对代码中常见的字串用法进行分析 从中读者可以知道如何避免严重影响程序性能的字串操作 尽量少使用字串加法运算符 请看以下两段代码 ( ) String s = ab ;s += cd ; ( ) String s = ab + cd 这两段代码运行结果一样 但速度一样快吗? 请看第( )段代码生成的MSIL指令 locals init ([ ] string s )IL_ : nopIL_ : ldstr ab IL_ : stloc IL_ : ldloc IL_ : ldstr cd IL_ d: call string [mscorlib]System String::Concat(string string)IL_ : stloc IL_ : ret cha138/Article/program/net/201311/15505相关参考