首页 新闻 会员 周边

关于字符串驻留的问题

0
悬赏园豆:20 [已解决问题] 解决于 2019-02-27 18:45

关于字符串驻留的问题

下面是CLR via C#书上的原话(上传不了图片 )

CLR初始化时会创建一个内部哈希表,在这个表中,键(key)是字符串,值(value)是对托管堆中的String对象的引用。来实现字符串的驻留机制!

我的问题是CLR如何判断字符串在hash表中(或是如何通过这个机制提高性能的)
1.如果判断时根据字符串且已分配内存,为何还需要在hash表内存入相同引用并返回。这似乎起不到节约内存的作用
2.如果判断时未分配内存,又是如何判断字符串并返回hash内部的引用的

dlrowolleh的主页 dlrowolleh | 菜鸟二级 | 园豆:296
提问于:2019-02-27 17:06
< >
分享
最佳答案
0

第一个问题好回答,因为字符串在.net体系里是个对象,有很多方法,属性的。如果仅仅记录一个“字符串”,就没法调用String对象的很多方法了。

第二个问题没太看明白。你的意思是怎么检索哪些key已经存在于hashtable中了吗?这个我就不知道了,没有研究过过hash表的实现代码。有空看下

收获园豆:20
会长 | 专家六级 |园豆:12401 | 2019-02-27 17:58

谢谢回答,第二个问题其实是我没弄懂第一个问题的一个乌龙,请无视~

dlrowolleh | 园豆:296 (菜鸟二级) | 2019-02-27 18:46
其他回答(1)
0

第一个问题,在hash表中存入相同引用的作用 : 就是为了给创建相同String字符串的不同对象返回同一个引用,这是字符串驻留的机制,所以这是必要的。
第二个问题,hashtale 中key是一个值, 在哈希表中是通过一个特定的算法,将每个key通过一个函数计算后得到一个不同的值,CLR 中的哈希表中的key为什么需要去分配内存呢?,只要通过key 计算得到其映射的value的地址就可以了。

Shendu.CC | 园豆:2138 (老鸟四级) | 2019-02-27 18:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册