`
baobeituping
  • 浏览: 1070807 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

.net 如何高效地使用string(转)

    博客分类:
  • .NET
阅读更多

string是恒定的(immutable)

和其他类型比较,string最为显著的一个特点就是它具有恒定不变性:我们一旦创建了一个string,在managed heap 上为他分配了一块连续的内存空间,我们将不能以任何方式对这个string进行修改使之变长、变短、改变格式。所有对这个string进行各项操作(比如调用ToUpper获得大写格式的string)而返回的string,实际上另一个重新创建的string,其本身并不会产生任何变化。

String的恒定性具有很多的好处,它首先保证了对于一个既定string的任意操作不会造成对其的改变,同时还意味着我们不用考虑操作string时候出现的线程同步的问题。在string恒定的这些好处之中,我觉得最大的好处是:它成就了字符串的驻留。

CLR通过一个内部的interning table保证了CLR只维护具有不同字符序列的string,任何具有相同字符序列的string所引用的均为同一个string对象,同一段为该string配分的内存快。字符串的驻留极大地较低了程序执行对内存的占用。

对于string的恒定性和字符串的驻留,还有一点需要特别指出的是:string的恒定性不单单是针对某一个单独的AppDomain,而是针对一个进程的。

下面简单介绍一些高效地使用string的一些小的建议:

1. 尽量使用字符串(literal string)相加来代替字符串变量和字符创相加,因为这样可以使用现有的string操作指令进行操作和利用字符串驻留。

比如:

string s = "abc" + "def";

优于

string s = "abc";
= s + "def";

2. 在需要的时候使用StringBuilder对string作频繁的操作:

由于string的恒定性,在我们对一个string进行某些操作的时候,比如调用ToUpper()或者ToLower()把某个string每个字符转化成大写或者小写;调用SubString()取子串;会创建一个新的string,有时候会创建一些新的临时string。这样的操作会增加内存的压力。所有在对string作频繁操作的情况下,我们会考虑使用StringBuilder来高效地操作string。StringBuilder之所以能对string操作带来更好的performance,是因为在它的内部维护一个字符数组,而不是一个string来避免string操作带来的新的string的创建。

StringBuilder是一个很好的字符累加器,我们应该充分地利用这一个功能:

StringBuilder sb = new StringBuilder();
sb.Append(str1 
+ str2);

最好写成

StringBuilder sb = new StringBuilder();
sb.Append(str1);
sb.Append(str2);

避免创建一个新的临时string来保存str1 + str2。

再比如下面的Code

StringBuilder sb = new StringBuilder();
sb.Append(WorkOnString1());
sb.Append(WorkOnString2());
sb.Append(WorkOnString3());

最好写好吧WorkOnString1,WorkOnString2,WorkOnString3定义成:

WorkOnString1(StringBuilder sb)
WorkOnString2(StringBuilder sb)
WorkOnString3(StringBuilder sb)

3. 高效地进行string的比较操作

我们知道,对象之间的比较有比较Value和比较Reference之说。一般地对Reference进行比较的速度最快。对于string,在字符串驻留的前提下,我们可以把对Value的比较用Reference的比较来代替从而会的Performance的提升。

此外,对于忽略大小写的比较,我们最好使用string的static方法Compare(string strA, string strB, bool ignoreCase)。也就是说:

if(str1.ToLower()==str2.ToLower())

最好写成

If(string. Compare(str1,str2,true))
分享到:
评论

相关推荐

    在.NET程序中正确使用String类型

    在.NET程序设计中,String类型是...总之,在.NET环境中正确使用String类型意味着理解其内在机制,包括不可变性、字符串池、以及如何高效地进行字符串操作。通过遵循这些最佳实践,可以编写出更高效、更易于维护的代码。

    .NET再谈String

    【字符串比较】在.NET开发中,字符串比较是一个常见的任务,`String.Compare()`方法是我们经常会用到的一个工具。...同时,理解`string`和`System.String`的差异,可以更好地进行跨语言交互和代码的可读性设计。

    VB.NET 字符串与二进制间的转换

    当处理大量数据或文件时,使用`FileStream`、`MemoryStream`等流对象可以更高效。例如,你可以将字符串写入`MemoryStream`,然后用`MemoryStream.ToArray()`获取字节数组。 5. **XML 或 JSON 序列化** 如果你的...

    VB.NET 进制转换 2进制 8进制 10进制 16进制 实现互转

    通过掌握这些基本的转换方法,你可以轻松地在VB.NET中实现不同进制之间的互转。在实际项目中,理解这些基础知识对于编写高效、可靠的代码至关重要。当然,如果你的代码还有待优化,可以参考更多的在线资源、社区讨论...

    VB.NET C# 互转 Convert

    5. **字符串操作**:VB.NET的字符串拼接通常使用&,C#使用+或string.Format。 6. **异常处理**:VB.NET的On Error和Try...Catch...Finally对应C#的try-catch-finally结构。 7. **属性和方法**:VB.NET的Property和...

    .net简体繁体转换

    通过以上介绍可以看出,在.NET框架中实现简繁体转换是非常简单且高效的。开发者只需要调用相应的API即可完成转换工作,无需深入了解内部的具体实现细节。这种高封装性和易用性使得.NET成为开发跨语言、跨文化应用...

    ASP.NET DataTable与Json互转

    1. **JavaScriptSerializer**: .NET Framework提供了一个内置的`System.Web.Script.Serialization.JavaScriptSerializer`类,可以方便地将DataTable转换为JSON字符串。首先,我们需要创建一个JavaScriptSerializer...

    Json.net Json数据转换的利器

    它极大地简化了JSON数据与.NET自定义类型之间的转换,无论是解析JSON字符串为.NET对象,还是将.NET对象序列化为JSON字符串,Json.NET都能提供高效、灵活且强大的功能。 在标题"Json.net Json数据转换的利器"中,...

    .net html转pdf 使用word API

    另外,如果你的应用场景需要更稳定、更高效的HTML到PDF转换,可以考虑使用专门的第三方库,如wkhtmltopdf(基于Webkit的开源工具)、PDFSharp或iTextSharp等。这些库通常能提供更好的转换质量和更快的速度,但需要...

    用VB.NET实现的简繁体互转工具

    在这个特定的场景中,我们关注的是一个使用VB.NET实现的“简繁体互转工具”。 简繁体互转是中文信息处理中的一个重要功能,它涉及到中文字符集的转换。在简体中文和繁体中文之间进行转换,对于跨地区、跨文化的沟通...

    asp.net mvc使用LucenceNet

    通过索引器和搜索器的使用,我们可以轻松地将数据库或其他数据源中的数据转换为可搜索的索引,并为用户提供快速、精确的搜索体验。分析器在处理查询和索引构建时起着关键作用,确保了文本的正确处理和匹配。这种组合...

    asp.net实现网站简体繁体转换

    在ASP.NET开发中,有时我们需要为用户提供简体中文与繁体中文之间的切换功能,以便不同地区的用户能够方便地浏览网站内容。本项目是基于C#编程语言实现的一个网站简体到繁体的转换解决方案,作者自述在研究了网上的...

    在ASP.NET MVC中使用StackExCahnge.Redis实现用户登陆,并保持登陆

    在生产环境中,可以考虑使用Redis的Sorted Set或HyperLogLog数据结构来高效地计算在线用户。 8. **异常处理和优化**: 由于网络问题或Redis服务器故障,操作可能会失败。因此,需要在代码中加入适当的异常处理,...

    .net页面转pdf格式

    在.NET开发环境中,将HTML页面转换为PDF格式是一项常见...选择合适的库并正确地集成到ASP.NET项目中,可以高效地实现这一功能。在处理过程中,要注意版权问题,因为某些库可能需要购买商业许可证才能在生产环境中使用。

    asp.net下简单使用ajax

    ASP.NET 下的 AJAX 使用主要涉及前端 JavaScript 和 jQuery 技术,以及后端 ASP.NET 的交互。AJAX(Asynchronous JavaScript and XML)允许我们在不刷新整个页面的情况下与服务器进行异步数据交换,提升用户体验。...

    在ASP.NET MVC中使用Redis 的Demo:通过Redis实现用户登陆,并保持登陆状态。

    在ASP.NET MVC框架中,Redis常被用作一个高效的缓存和会话存储解决方案,以提升网站性能并处理用户登录状态。本示例将详细解释如何利用Redis来实现在ASP.NET MVC应用程序中用户登录功能,并保持用户的登录状态,同时...

    asp.net 高效应用EXCEL文件

    在ASP.NET环境中高效地应用Excel文件是Web开发中常见的需求,尤其在数据分析、报表生成以及数据导入导出等场景。本教程将详细讲解如何利用ASP.NET进行Excel的基本操作,包括读取外部数据、数据处理及数据挖掘,并...

    VB 转 VB.net程序员

    通过学习和掌握VB.NET的新特性,程序员能够更好地应对日益增长的技术挑战,开发出更加健壮和高效的软件产品。无论是从个人职业发展的角度来看,还是从团队项目的长远发展来看,转向VB.NET都是一项明智的选择。

Global site tag (gtag.js) - Google Analytics