当前位置:首页 > 数码 > .NET-以及内存机制深化详解-中高效字符串存储指南-常量与灵活字符串解析

.NET-以及内存机制深化详解-中高效字符串存储指南-常量与灵活字符串解析

admin8个月前 (05-08)数码55

在中,字符串是无法变的,这象征着一旦创立,字符串的内容就不能被修正。字符串在内存中以不同的模式存储,详细取决于它是常量字符串还是灵活创立的字符串。

常量字符串

常量字符串在编译时就被解析,并在程序的元数据(Metadata)中存储。多个相反的字符串常量或者会共享同一块内存。

stringstr1="Hello,";stringstr2="World!";//编译时已知的字符串常量在元数据中被共享stringconcatenated=str1+str2;Console.WriteLine(concatenated);//输入:Hello,World!
中高效字符串存储指南

灵活创立的字符串

灵活创立的字符串经过堆内存启动存储。每当咱们对字符串启动修正时,实践上是创立了一个新的字符串对象,而原始的字符串对象坚持不变。

stringstr="Hello";str+=",World!";Console.WriteLine(str);//输入:Hello,World!

在上述例子中,的值在拼接后出现了变动,但实践上是创立了一个新的字符串对象,而原始的"Hello"字符串对象坚持不变。

字符串池

.NET框架经常使用了一个称为字符串池(StringPool)的机制,它是一个位于堆中的数据结构,用于存储字符串常量以及经过 string.Intern() 方法放入池中的字符串。字符串池的目标是为了重用字符串常量,缩小内存的经常使用。

stringstr1="Hello";stringstr2="Hello";boolareEqual=(str1==str2);//true,由于它们指向字符串池中的同一对象

在这个例子中,和实践上指向了字符串池中的同一对象,因此它们的内容相等。

stringstr1=newstring("Hello".ToCharArray());stringstr2=newstring("Hello".ToCharArray());boolareEqual=(str1==str2);//true,由于它们的内容相等boolreferenceEqual=object.ReferenceEquals(str1,str2);//false,它们不指向同一对象

在这个例子中,和的内容相等,但它们不是同一对象,由于每次经常使用 newstring(...) 都会创立一个新的字符串对象。

总的来说,字符串在内存中的存储模式关键有两种:字符串常量和灵活创立的字符串。字符串常量可以共享内存,而灵活创立的字符串存储在堆上。字符串池用于存储字符串常量,以便在须要时重用相反的字符串对象,缩小内存开支。


.NET深入体验与实战精要的目录

第1章 ,你真的知道了吗 31.1 搞清自己是干什么的 41.2 的几个特性 71.3 万丈高楼平地起:面试者必会 91.3.1 C#介绍 101.3.2 命名空间 101.3.3 C#语法格式要点 101.3.4 变量 121.3.5 类型推断 121.3.6 变量的作用域 131.3.7 常量 161.3.8 流程控制 161.3.9 字符串常见操作 211.3.10 几个常用的数学函数 271.4 的面向对象之门 271.4.1 继承——“子承父业” 281.4.2 委托——“任务书” 351.4.3 事件——“年终分红” 421.4.4 反射——“解剖” 491.5 开发几把小刀 521.5.1 using之多变身 521.5.2 @符号的妙用 541.5.3 预处理指令,有你更轻松 551.6 Visual Studio.NET 2008 实战 581.6.1 如何创建ASP.NET项目 581.6.2 如何创建Windows项目 611.6.3 Visual Studio.NET 2008操作与使用技巧 611.6.4 常见开发调试技巧 661.6.5 错误异常处理方法 70本章常见技术面试题 76常见面试技巧之面试前的准备 76本章小结 77第2章 细节决定成败 792.1 Equals()和运算符==的区别 802.2 const和readonly的区别 822.3 private、protected、public和internal的区别 862.4 sealed、new、virtual、abstract与override 872.5 abstract class与interface 912.6 公共变量与属性的区别 932.7 参数修饰符params、out和ref的区别 962.8 值类型和引用类型的区别 1002.9 结构与类的区别 1032.10 Dispose()和Close()、Finalize()的 区别 1062.11 string和StringBuilder有什么区别 1062.12 Debug版本和Release版本的 区别 108本章常见技术面试题 111常见面试技巧之细节决定成败 111本章小结 112第3章 ASP.NET开发大杂烩 1133.1 页面生命周期 1143.1.1 独立页面生命周期事件顺序 1143.1.2 具有Master页的生命周期事件顺序 1163.1.3 ASP.NET生命周期详解 1183.2 页面状态管理 1203.2.1 Cookie 1213.2.2 HtmlInputHidden隐藏域 1233.2.3 ViewState 1233.2.4 查询字符串Request 1243.2.5 Aplication对象 1253.2.6 Session对象 1253.2.7 示例项目:在线用户列表统计 1283.3 服务器和客户端数据交互 1313.3.1 页面数据绑定全攻略 1313.3.2 Bind和Eval的区别 1403.4 ASP.NET编程中的技巧 1423.4.1 页面之间传值的7种方法 1423.4.2 get与post方法的区别 1463.4.3 ASP.NET服务器控件和HTML控件的区别 1463.4.4 和的区别 1483.4.5 刷新页面的方法汇总 1493.4.6 页面事件控制 1503.4.7 在URL中传递中文的解决方案 1523.4.8 增强用户体验的一些技巧 1533.4.9 XHTML与HTML的区别 1563.5 打造自己的页面基类PageBase 161本章常见技术面试题 164常见面试技巧之如何做好自我介绍 164本章小结 165第4章 Windows窗体编程你也行 1674.1 创建简单的WinForm项目 1684.2 创建MDI窗体应用 1704.3 获取应用程序路径信息 1744.4 回车跳转控件焦点 1754.5 窗体间传递复杂数据 1764.5.1 构造传递 1764.5.2 公有字段传递 1774.5.3 委托与事件传递 1794.6 实现个性化窗体界面 1814.7 无标题窗体拖动的两种方法 1834.8 让程序只启动一次——单实例运行 1844.9 实现系统托盘和热键呼出 1854.10 进程与多线程的区别 1904.11 创建多线程应用程序 1914.12 WinForm开发常见问题 1944.12.1 如何设置运行时窗体的起始位置 1944.12.2 如何使一个窗体在屏幕的最顶端 1944.12.3 实现窗体渐显效果 1944.12.4 设置窗口背景为渐变色 1954.12.5 模态窗口和非模态窗口 1964.12.6 屏蔽窗口右上角的关闭 操作 1964.12.7 调用执行外部的程序 197本章常见技术面试题 197常见面试技巧之经典问题巧回答 198本章小结 198第5章 数据库开发 1995.1 ADO.NET与抽水的故事 2005.1.1 ADO.NET的定义 2005.1.2 趣味理解ADO.NET对象模型 2025.1.3 进水笼头——建立Connection 2045.1.4 抽水机——Command 2065.1.5 输水管——DataAdapter 2095.1.6 输水管——DataReader 2105.1.7 随用随关,释放资源 2125.1.8 水库管理——DataSet 2125.1.9 水池子——DataTable 2145.2 数据库操作类的封装详解 2175.2.1 执行命令方法的封装 2175.2.2 查询数据方法的封装 2205.2.3 数据统计方法的封装 2215.2.4 实现SqlParameter方式 2225.2.5 实现多数据库的访问 2235.3 常用经典SQL语句 2245.4 事务处理 2265.4.1 SQL和存储过程级别的事务 2275.4.2 ADO.NET级别的事务 2295.4.3 ASP.NET页面级别的事务 2305.4.4 企业级服务COM+事务 2315.4.5 事务处理 2365.5 Oracle开发常见问题 2405.5.1 Oracle和SQL Server的常用函数对比 2405.5.2 Oracle和SQL Server的语句区别 2445.5.3 ASP.NET连接Oracle失败的解决方法 245本章常见技术面试题 246常见面试技巧之经典问题巧回答 246本章小结 247第6章 关于XML 2496.1 XML概述 2506.1.1 XML和HTML有什么区别 2506.1.2 XML的优势 2506.2 文档结构与基本语法 2516.3 XML操作 2536.3.1 XmlDocument创建XML文档 2536.3.2 XmlTextWriter创建XML文档 2546.3.3 XmlDocument读取XML文档 2566.3.4 XmlTextReader读取XML文档 2576.3.5 在HTML中显示XML中的数据 2586.3.6 JavaScript获取XML内容 2596.3.7 项目案例:通用自定义XML配置类 2636.4 ADO.NET与XML 2666.4.1 读XML文档到DataSet 2666.4.2 target=_blank>

字符常量和字符串常量有什么区别

字符常量和字符串常量之间的主要区别在于它们所代表的数据类型和存储方式。字符常量是基本数据类型,而字符串常量是复合数据类型。

字符常量在编程语言中通常被定义为用单引号包围的一个字符。例如,在C++或Java中,a、b、1等都是字符常量。这些常量在内存中占用的空间大小通常取决于具体的编程语言,但一般是一个字节。字符常量用于存储ASCII字符集中的一个字符,包括字母、数字和一些特殊符号。

其次,字符串常量则是由多个字符组成的序列,通常用双引号包围。例如,Hello, World!就是一个字符串常量。字符串常量在内存中通常以字符数组的形式存储,每个字符占用一个元素的空间,额外还有一个元素用于存储结束符(比如\0)。所以,字符串Hello在内存中实际上占用6个字节的空间:5个字节用于存储字符H、e、l、l和o,1个字节用于存储结束符\0。

然后,这两种类型的数据在操作上也有所不同。字符常量可以直接参与算术运算和逻辑运算,而字符串常量则常常需要进行一些特殊的操作,如连接(将两个字符串合并成一个)、查找(在一个字符串中查找一个特定的子串或字符)等。

最后,从语言处理的角度来看,字符常量是编程语言的基本组成部分,而字符串常量则提供了更丰富的表达和操作方式。例如,我们可以使用字符串常量来表示文本信息、进行模式匹配等。在许多情况下,字符串常量的处理也是编程任务中的重要部分。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: .NET

“.NET-以及内存机制深化详解-中高效字符串存储指南-常量与灵活字符串解析” 的相关文章

揭秘其在.NET运行中灵敏读取和修正Excel文件的弱小性能-NPOI库深度解析 (揭秘揭秘大揭秘)

揭秘其在.NET运行中灵敏读取和修正Excel文件的弱小性能-NPOI库深度解析 (揭秘揭秘大揭秘)

一、NPOI库简介 NPOI(Non-ProfitOpenSourceSoftwarefor)是一个开源的.NET库,用于读取和写入Microsoft格局文件,包括、和PowerPoint等...

Core两边件成功Web-经常使用.NET-API流量限度指南 (core左边的工具如何恢复)

Core两边件成功Web-经常使用.NET-API流量限度指南 (core左边的工具如何恢复)

在Core中,咱们可以经常使用ASP.NETCore的两边件来对WebAPI启动流量限度。ASP.NETCore提供了一个名为RateLimit的开源库,可以繁难地成功流量限度性能。上方将详细引见...

作为-的原因-Python-开发人员-我开始使用-.NET (作为的原因)

作为-的原因-Python-开发人员-我开始使用-.NET (作为的原因)

作者:Alex Maher | 编译:小欧 作为一名开发人员,很长一段时间以来,我一直关注 C 和 .NET 的出色工具和功能。但我最近开始使用 Python,感觉非常棒。这里申明一点,文章...

INI和环境变量-.NET性能文件大揭秘-XML-轻松读取JSON (int环境)

INI和环境变量-.NET性能文件大揭秘-XML-轻松读取JSON (int环境)

概述: 中的IConfiguration接口提供了一种多源读取性能消息的灵敏机制,包括JSON、XML、INI文件和环境变量。经过示例,明晰展示了从这些不同源中读取性能的方法,使性能失...

与-的比较和选择指南-ValueTask-异步编程-Task-.NET-深入 (と与や的比较)

与-的比较和选择指南-ValueTask-异步编程-Task-.NET-深入 (と与や的比较)

In C, a task represents an asynchronous operation. It is commonly used to encapsulate time-consumi...

开源的.NET散布式事务处置打算 (开源的内核架构)

开源的.NET散布式事务处置打算 (开源的内核架构)

前言 在散布式系统中,因为各个系统服务之间的独立性和网络通讯的不确定性,要确保跨系统的事务操作的最终分歧性是一项严重的应战。当天给大家介绍一个开源的处置散布式事务的处置打算基于.NETSta...

揭秘.NET-冲动人心的变动-8.0 (揭秘国安部点名的间谍机构)

揭秘.NET-冲动人心的变动-8.0 (揭秘国安部点名的间谍机构)

作者:葡萄城技术团队 链接: 1性能优化 .NET8在整个堆栈中带来了数千项性能改良。自动状况下会启用一种名为灵活性能文件疏导优化(PGO)的新代码生成器,它可以依据实...