当前位置: 首页 > news >正文

门户网站为什么衰落网游推广员

门户网站为什么衰落,网游推广员,手机网站用什么程序做,免费网站模板网刚开始学习C#的时候#xff0c;就听说CLR对于String类有一种特别的内存管理机制#xff1a;有时候#xff0c;明明声明了两个String类的对象#xff0c;但是他们偏偏却指向同一个实例。如下#xff1a; String s1 Hello;String s2 Hello; //s2和s…  刚开始学习C#的时候就听说CLR对于String类有一种特别的内存管理机制有时候明明声明了两个String类的对象但是他们偏偏却指向同一个实例。如下 String s1 Hello;String s2 Hello; //s2和s1的实际值都是Hellobool same (object) s1 (object) s2;//这里比较s1、s2是否引用了同一个对象实例//所上海闵行企业网站设计与制作以不能写作bool same s1 s2; //因为String类重载了操作符来比较String对象包含的实际值   这里的same会被赋值为true。也就是说s1真的和s2引用了同一个String对象。当然应该注意到的是s1和s2都被统一赋值为同一个字符串Hello这才是出现上述情况的原因。   现在我们初步得出结论当有多个字符串变量包含了同样的字符串实际值时CLR可能不会为它们重复地分配内存而是让它们统统指向同一个字符串对象实上海闵行企业网站制作例。这里我说了可能是因为某些情况下确实也会发生同一个字符串实际值在内存中有多份副本同时存在。请继续往下看。   我们知道String类有很多特别的地方其中之一就是它是不会改变的immutable。这说明在我们每次对一个String对象进行操作时比如说使用TrimReplace等方法并不是真的对这个String对象的实例进行修改而是返回一个新的String对象实例作为操作执行的结果。String对象的实例一经生成到死都不会被改变了   基于String类这样的特性CLR让表示相同的字符串实际值的变量指向同一个String事例就是完全合理的了。因为利用任何一个对String实例的引用所进行的修改操作都不会切实地影响到该实例的状态也就不会影响到其他所有指向该实例的引用所表示的字符串实际值。CLR如此管理String类的内存分配可以优化内存的使用情况避免内存中包含冗余的数据。   为了实现这个机制CLR默默地维护了一个叫做驻留池Intern Pool的表。这个表记录了所有在代码中使用字面量声明的字符串实例的引用。这说明使用字面量声明的字符串会进入驻留池而其他方式声明的字符串并不会进入也就不会自动享受到CLR防止字符串冗余的机制的好处了。这就是我上文提到的某些情况下确实也会发生同一个字符串实际值在内存中有多份副本同时存在的例子。请看这个例子 StringBuilder sb new StringBuilder();sb.Append(He).Append(llo);string s1 Hello;string s2 sb.ToString();bool same (object) s1 (object) s2;   这时same就不是true了因为虽然s1s2表示的是相同的字符串但是由于s2不是通过字面量声明的CLR在为sb.ToString()方法的返回值分配内存时并不会到驻留池中去检查是否有值为Hello的字符串已经存在了所以自然不会让s2指向驻留池内的对象。   为了让编程者能够强制CLR检查驻留池以避免冗余的字符串副本String类的设计者提供了一个名为Intern的类方法。下面是该方法的一个示例 StringBuilder sb new StringBuilder();sb.Append(He).Append(llo上海徐汇企业网站设计与制作lecolor: #800000;);string s1 上海徐汇企业网站制作lecolor: #000000; Hello;string s2 String.Intern(sb.ToString());bool same (object) s1 (object) s2;   好了same又是true了。Intern方法接受一个字符串作为参数它会在驻留池中检查是否存在参数所表示的字符串。如果存在则返回那个驻留池中的字符串的引用否则向驻留池中加入一个新的表示相同值的字符串并返回这个字符串的引用。不过要注意的是就算Intern方法在驻留池中找到了相同值的字符串也不能让您省却一次字符串内存分配的操作因为作为参数的字符串已经被分配了一次内存了。而使用Intern方法的好处在于如果Intern方法在驻留池中找到了相同值的字符串此时虽然在内存中存在两份该字符串的副本一份是参数一份是驻留池中的但是随着时间的流逝参数所引用的那个副本会被垃圾回收掉这样对于该字符串内存中就不存在冗余了。     当您的程序中存在某个方法可以根据不同的上下文环境创建并返回一个很长的字符串而在程序运行的过程中它有会经常返回同样的字符串时您可能就要考虑考虑使用Intern方法来提高内存的利用率了。     不过同样值得注意的是使用Intern方法让一个字符串存活于驻留池中也有一个副作用即使已经不存在任何其它引用指向驻留池中的字符串了这个字符串仍然不一定会被垃圾回收掉。也就是说即使驻留池中的字符串已经没有用处了它可能也要等到CLR终结时才被销毁。当您使用Intern方法的时候也应该考虑到这个特殊的行为。转载于:https://www.cnblogs.com/waw/archive/2011/10/19/2218015.html
http://www.yutouwan.com/news/76060/

相关文章:

  • 成都麦卡网络做网站开发怎么样做网站外包多少钱
  • 吉林省建设工程造价网站网站域名空间合同
  • 京东的网站规划与建设怎么开彩票网站做站长
  • 做设计都有什么网站北京吴勇设计工作室
  • 三好街做网站的公司网站建设中公司
  • 个人网站空间价格个人网站建设的小清新图片
  • 外卖网站建设的策划书微信网站协议书
  • 高级建站网站做网站有域名还需要什么
  • 网站建设 软件做违法网站会怎样
  • wordpress内容导航无锡网站排名优化
  • 学做早餐网站长春网站建设方案推广
  • 做网站优化公司学校网站制作价格
  • 压缩图片在线网站免费ai域名注册
  • 网站导航固定wordpress默认index
  • 镇江网站建设推广找思创seo流量是什么
  • 网站建设的基本要求中石化第五建设有限公司官方网站
  • 论坛网站备案流程图创建一个小程序需要多少钱
  • 关于医院网站建设的通知常用的网站都有哪些
  • 哈尔滨网站域名部门网站建设开票内容些什么
  • 素材网站松岗网站开发
  • 网站域名可以做端口映射吗代写文章质量高的平台
  • 武清做网站园林公司做网站的好处
  • 家政公司网站的建设电子商务网站开发是指
  • 公司网站建设费用会计处理图书馆网站建设费用
  • 网站开发挣不挣钱杭州网站建设及推广
  • 厦门网站制作套餐网站付费模板
  • 网站建设费分多少期摊销深圳网站建设vr知识
  • 网站建站网站开发什么网站可以做投资
  • 网站商城例子下载广西住房和城乡建设厅网站
  • 百度商桥在网站怎样注册个人网站