最新评论
Re:CLR系列:窥视HashTable zhaohua_wang 2010-12-24 12:21
老王来借博主的热门评论地盘用用,鼓励大伙甭管认识不认识的一起来搞一个编程挑战赛吧,用代码来Happy NewYear一下,地址见下面的博文,再次谢谢博主啦!
http://www.cnblogs.com/wangzhaohua/archive/2010/12/24/2011_New_Year_Coding_Challenge.html
Re:CLR系列:窥视HashTable haogj 2010-12-10 19:32
当我们在 Hashtable 中通过键来保存值的时候,Hashtable 会通过键对象的 HashCode 来确定内容保存在表中的位置,同时还要保存这个键对象的引用。
当我们通过 ContainsKey 来查找的时候,Hashtable 将会取得原来键对象的 HashCode 与现在的查找对象的 HashCode 去比较。如果相同,再通过 HashCode 在内部存储中找到保存的值。
在第四次的时候,使用 11 的时候,可以与原来的键对象相同,但是,原来通过 10 保存,现在使用 HashCode 11 来查找,有问题,所以找不到。
在使用 10 的时候,与原来的键对象都不相同,所以,更加找不到。
但是,在 Hashtable 中确实保存着一个条目。所以,在第七次的时候可以遍历到。
所以,如果通过一个对象作为键在 Hashtable 中保存数据,那么,一旦修改了这个键对象,就没有办法通过键对象来找到原来保存的值。
正确的方式是,先移除原来的键值对,然后修改键对象,最后,保存新的键值对。
在 CLR Via C# 中文 第三版的 130 页中间,Jeffrey 也提到了这个问题。
Re:CLR系列:窥视HashTable 王长委 2010-12-10 16:08
看了你的博客之后,我自己又写了一遍,不过对的代码稍加改动,有一点我甚是不解
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Threading;
namespace HashtableDemo
{
class Program
{
static void Main(string[] args)
{
//第一次输出
Hashtable ha = new Hashtable();
for (int i = 0; i < 5; i++)
ha.Add(new cuskey(i), i);
if (ha.ContainsKey(new cuskey(3)))
Console.WriteLine("find");
else
Console.WriteLine("Can't find");
ha.Clear();
//第二次输出
MyTest t = new MyTest(10);
ha.Add(t,10);
if (ha.ContainsKey(new MyTest(10)))
{
Console.WriteLine("find");
}
else
Console.WriteLine("Can't find");
//第三次输出
Console.WriteLine(ha[new MyTest(10)]);
//第四次输出
t.KeyNum = 11;
if (ha.ContainsKey(new MyTest(11)))
{
Console.WriteLine("find 11");
}
else if (ha.ContainsKey(new MyTest(10)))
Console.WriteLine("find 10");
else
Console.WriteLine("Can't find");
//第五次输出
Console.WriteLine(ha.Count);
//第六次输出
MyTest mt = new MyTest(11);
ha.Add(mt, 11);
Console.WriteLine(ha.Count);
//第七次输出
foreach (DictionaryEntry item in ha)
{
Console.WriteLine((item.Key as MyTest).KeyNum);
Console.WriteLine(item.Value);
}
Console.ReadLine();
}
}
class MyTest {
int keyNum;
public int KeyNum
{
get { return keyNum; }
set { keyNum = value; }
}
public MyTest(int num) {
keyNum = num;
}
public override int GetHashCode()
{
return keyNum;
}
public override bool Equals(object obj)
{
return keyNum == ((MyTest)obj).KeyNum;
}
}
class cuskey {
int keyNum;
public int KeyNum
{
get { return keyNum; }
set { keyNum = value; }
}
public cuskey(int num) {
keyNum = num;
}
}
}
在第四次输出的时候,我用匹配了两个键,都匹配不出来,但是在第七次输出的时候,确实有这样的键,这是怎么回事???
还望能够指点
这里先谢过了。。。
Re:公司培训文档-c#基础学习 追忆似水流年 2010-08-31 16:53
顶你啊!这么多,这么全。
Re:8万亿 全球第二还是最二? gjcn 2010-07-01 16:51
不好意思,网址打不开了,瞬间被封了。。这里贴出来的只是一部分,后面的只有打开网址才能看了,可惜。
re: CLR系列:由一段代码所想到的 朱才 2009-06-29 13:34
呵呵,我当年也想到了这个问题,特别是:lockObject = ""的情况,可能是最容易出现问题的。
若是两个第三方程序都lock值为""的string变量,那就有好戏了。
re: CLR系列:浅析泛型的本质 龙潜冰风悄林 2009-05-04 16:51
楼主
貌似还要添加一个intrGeneric<long>();来证明你的论断--值类型是不同的类型生成不同的代码。
不过楼主从底层论证的方式倒是值得学习
re: CLR系列:浅析泛型的本质 wefgod 2009-03-05 23:39
不错的文章···话说技术的讨论似乎也不能就说过时了吧···
至少对于一些初学者来说这还是新的东西
感谢作者发布自己的研究心得
re: CLR系列:浅析泛型的本质 孤星赏月 2008-12-17 19:10
--引用--------------------------------------------------
tester: 写的真的不错!
--------------------------------------------------------
re: CLR系列:浅析.NET的JIT编译 呵呵8888 2008-12-13 09:52
您好,能不能说明一下,csc jit 实时编译,有什么区别呢。
re: CLR系列:浅析泛型的本质 hahahehe 2008-12-12 11:46
@泰斗恒心
关于泛型的效率,园子里有很多文章,可以参考一下。
re: CLR系列:浅析泛型的本质 泰斗恒心 2008-12-12 09:40
关于C#泛型方法和普通重载方法的运行效率哪个更高?期待楼主回答
re: [转]如果你在深圳,你一定要看! gjcn 2008-12-10 16:13
@蒋炜
哈哈,不错
正在深圳生活工作还没有打算离开的,会有一万个理由告诉你,深圳的好,他们不是为了说服你,是在说服自己,来证明自己目前留在深圳的做法无比正确。
准备离开深圳的,会有一万桶苦水要跟你倾诉,深圳的烂,他们不是为了附和你,而是在开导自己,来证明离开深圳是个无比英明的决定。
没有去过深圳的,也许会犹豫,也许会不屑,但,他们根本没有发言权。
而早就从深圳回来的,也许会点头,也许会摇头,但一定把感触藏在心底,慢慢品味,悄悄回忆。
我是最后一种。
re: CLR系列:浅析委托 很爽,很深入 2008-12-10 10:40
同意楼主观点,不管版本怎么变,基础的知识什么时候都要知道,深入,很深入的了解!!!期待楼主再深入一些
re: CLR系列:浅析委托 aierong 2008-12-10 08:17
ding
re: CLR系列:浅析委托 simon_cm 2008-12-09 18:00
好文章,学习了
re: CLR系列:浅析委托 gjcn 2008-12-09 17:54
自己顶一下
re: [转]如果你在深圳,你一定要看! qweet 2008-12-09 14:10
天啊...恐怖的地方..但是看了很有感触,还是不去深圳了...
re: CLR系列:浅析委托 gjcn 2008-12-09 12:29
@Da Vinci
你那个很好,学习了
re: CLR系列:浅析委托 Da Vinci 2008-12-09 12:18
比我写的那个好, 学习了
re: [转]如果你在深圳,你一定要看! cjinle 2008-12-09 12:10
我的天呐~说得真恐怖!
我还想去深圳混呢~!
re: CLR系列:浅析委托 gjcn 2008-12-09 11:40
@West
不好意思,没注意到,谢谢
re: CLR系列:浅析委托 West 2008-12-09 11:32
code展不开。你检查一下
re: CLR系列:浅析.NET的JIT编译 Flicker 2008-12-04 23:47
JIT对代码的优化还包括:
1)JIT将所有引用类型的局部变量在最后一次使用后设为空引用,这样可以减
少引用计数器,以便GC收集,但是这种优化在使用System.GC.KeepAlive
会局部失效;
2)JIT会将频繁使用的局部变量直接放在CPU的寄存器中。
re: CLR系列:浅析泛型的本质 CSharper 2008-12-03 11:23
不错,够深入,和 CLR via C# 中写的一致
re: CLR系列:浅析.NET的JIT编译 gjcn 2008-12-02 09:48
@红泥
希望能做到短小精悍
re: CLR系列:浅析.NET的JIT编译 gjcn 2008-12-02 09:08
@梁逸晨
哈哈,,谢谢!
re: CLR系列:浅析.NET的JIT编译 gjcn 2008-12-02 09:07
@上不了岸的鱼{ttzhang}
感谢!!最近你是博客园第一顶帖子的。
楼主,请原谅我的自私,干了一天别的活,才来顶你的帖子。本来沙发应该是我坐的,这实在是我有生之年遇到的最震撼的况世名著。
re: CLR系列:浅析.NET的JIT编译 上不了岸的鱼{ttzhang} 2008-12-01 21:55
支持下楼主,还是这样学习比较有效
re: CLR系列:浅析.NET的JIT编译 很爽,很深入 2008-12-01 18:25
看了这些底层的 Log ,想起了大学时写的汇编程序,虽然高级语言屏蔽了这些内存的操作,但是能够了解到内存级的操作,对程序运行的具体情况才算是真正了解。支持楼主这样的方式来讲解。顶!!!!!!!!!!!!!!!!!!!!!!!!!!
re: CLR系列:浅析.NET的JIT编译 gjcn 2008-12-01 11:43
@xjb
@小猪凯
感谢!研究一下底层能更好的理解.NET
re: CLR系列:浅析.NET的JIT编译 gjcn 2008-12-01 11:43
@lbq1221119
多谢!有空来顶我的文章。
re: CLR系列:浅析.NET的JIT编译 lbq1221119 2008-12-01 11:09
不错不错
re: CLR系列:浅析.NET的JIT编译 gjcn 2008-12-01 10:47
自己顶一下。
re: CLR系列:浅析.NET的JIT编译 hahahehe 2008-12-01 10:19
顶一下,下班看看JIT的工作方式。
re: Inside C#(一些内部实现的东西) ghost5018 2008-12-01 10:14
不错,学到了新东西
re: CLR系列:浅析泛型的本质 tester 2008-11-28 19:33
写的真的不错!
re: CLR系列:浅析泛型的本质 yanli_liu 2008-11-27 12:46
看不懂,不过来给你顶顶。
有这么多人给你回复呢啊。
re: CLR系列:浅析泛型的本质 yatasoft 2008-11-26 10:52
继承是父类给子类一个占位符,类,是类给对象一个占位符,函数,参数是一个占位符,我突然感觉:泛型是不是借鉴了函数的参数占位符思想那,哈哈。自己乱想的。
re: CLR系列:浅析泛型的本质 AndyFish 2008-11-26 08:47
好文章,由浅入深,思路清晰,继续加油
re: CLR系列:浅析泛型的本质 ddda 2008-11-25 23:22
不错啊,有理有据,收藏了
re: CLR系列:浅析泛型的本质 很爽,很深入 2008-11-25 19:07
感觉楼主,对代码具体编译,执行的细节非常在意呢,这样也让我了解了一下,代码底层的运行机制。很爽,够深入。
re: CLR系列:浅析泛型的本质 gjcn 2008-11-25 18:17
@蛙蛙池塘
@vczh
多谢
re: CLR系列:浅析泛型的本质 蛙蛙池塘 2008-11-25 18:07
仔细阅过。