当前位置:编程学习 > C#/ASP.NET >>

请问在dictinary的key中存储上百万个string行的IP地址,64位程序,会有什么性能上的问题么?

value值是1024*1024数量级的int数字
查找速度? 内存是否够用呢?
如果key上千万呢?
多谢! --------------------编程问答-------------------- 不会有问题的
才几十M内存
IP是可以转成UInt32的

--------------------编程问答-------------------- 内存应该够用,如果再海量,就要考虑其他方式了,比如文件,没一段数据保存为一个文件 --------------------编程问答-------------------- 谢谢楼上两位,我算了算,如果key 和 value 都用 int32 表示的话,那 5000万个键值对 应该会用不到400M的内存,算上dictionary里面的其他东西,400M应该也足够了。
但是我比较担心查询性能上会不会有什么损失呢? 虽然按说应该是O(1)。。。 
还有就是我把string型的ip转化为int32之后放入key里面, 5000万的话,key的hashcode冲突的情况会发生么?概率有多大?

多谢! --------------------编程问答-------------------- 还有就是我是不是应该做一些优化,应为理论上这个dictionary会一直维护着这些键值对,直到service意外的down掉。。。
那我如果在建立dictionary的一开始就对其size做个较大的初始化,会不会这样能够减少dictionary以后resize的机会以及时间呢。。?
多谢!! --------------------编程问答-------------------- 这个是可以算出得吧
比如定义下面这个千万级的数据
Dictionary<UInt32, UInt32> dic = new Dictionary<UInt32, UInt32>(10240000);
key和value都是UInt32等于8个字节
10240000 * 8 = 81920000 字节
81920000 / 1024 / 1024 约等于78M
不知道有没有算错



--------------------编程问答-------------------- 对 是的啊。。。 但是这样子hashcode冲突的几率会有么? 如果key都是string型的ip转化过来的。。
引用 5 楼  的回复:
这个是可以算出得吧
比如定义下面这个千万级的数据
Dictionary<UInt32, UInt32> dic = new Dictionary<UInt32, UInt32>(10240000);
key和value都是UInt32等于8个字节
10240000 * 8 = 81920000 字节
81920000 / 1024 / 1024 约等于78M
不知道有没有算错

……
--------------------编程问答-------------------- 哪里用到HashCode?
String ip = "127.0.0.1";
你想用
ip.GetHashCode();??

--------------------编程问答-------------------- 你要干啥用?

          Dictionary<Int32, Int32> dic = new Dictionary<Int32, Int32>();
            Random rnd=new Random ();
            for (int i = 0; i < 50000000; i++)
            {
                dic[i] = rnd.Next();
            }

200多万个就System.OutOfMemoryException。 --------------------编程问答--------------------
引用 8 楼  的回复:
你要干啥用?
C# code

          Dictionary<Int32, Int32> dic = new Dictionary<Int32, Int32>();
            Random rnd=new Random ();
            for (int i = 0; i < 50000000; i++)
            {
         ……


Dictionary<Int32, Int32> dic = new Dictionary<Int32, Int32>(50000000);
设置一个数量
内存才不会成倍增长

--------------------编程问答-------------------- http://topic.csdn.net/u/20100211/16/e8c307bc-0051-4000-a97d-a275e4b4d1c9.html
引用 7 楼  的回复:
哪里用到HashCode?
String ip = "127.0.0.1";
你想用
ip.GetHashCode();??
--------------------编程问答-------------------- 我感觉,这种上百万的还是用数据库吧。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,