知识大全 在.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

相关参考

知识大全 c#(或vb.net)程序改进,可以提高性能

  使用值类型的ToString方法  在连接字符串时经常使用+号直接将数字添加到字符串中这种方法虽然简单也可以得到正确结果但是由于涉及到不同的数据类型数字需要通过装箱操作转化为引用类型才可以添加到字

知识大全 编程中string是不是引用类型

  在msdn上  值类型主要由两类组成  结构  枚举  结构分为以下几类  Numeric(数值)类型  整型  浮点型  decimal  bool  用户定义的结构  也就是string属于引

知识大全 .net程序员应该掌握的常用类库

  系统类  Type类Object类String类Array类Console类Exception类GC类MarshalByRefObject类Math类  DateTime结构Guid结构  ICl

知识大全 Java当中的String数据类型

Java当中的String数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  java中St

知识大全 oracle中一个简单的函数

  创建一个get_name函数返回值是String类型(注这里的返回类型是可以根据自己的需要来设置)程序如下  createorreplacefunctionget_name(strinvarcha

知识大全 如何存贮connection string

  关于connectionstring应该存放在哪里有许多不同的方法每个都有自己的使用场合根据MSDN和我以前编程的经验总结/摘录了一篇文章希望对大家有所帮助   在程序中要存储conne

知识大全 对string类型和stringBuilder类型的研究

对string类型和stringBuilder类型的研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 全面解析Java中的String数据类型

全面解析Java中的String数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先Str

知识大全 对非String类型进行校验时的出错处理

对非String类型进行校验时的出错处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关于Spri

知识大全 .net中应用程序域的概念

  在NET平台下程序集并没有直接承载在进程中(而传统的win程序是直接承载的)实际上NET可执行程序承载在进程的一个逻辑分区中术语称为应用程序域(也称AppDomain)可见一个进程可以包含多个应用