小编blo*_*don的帖子

C#字典内存管理

我有一个Dictionary<string,int>可能包含超过1000万个唯一键的潜力.我正在尝试减少这需要的内存量,同时仍然保持字典的功能.

我想的是将字符串的哈希值存储为long,这会将应用程序内存使用量减少到可接受的量(~1.5 gig到〜.5 gig),但我对我的做法感觉不太好这个.

long longKey=
BitConverter.ToInt64(cryptoTransformSHA1.ComputeHash(enc.GetBytes(strKey)), 0);
Run Code Online (Sandbox Code Playgroud)

基本上,这会在SHA1散列的末尾进行切换,并将其中的第一个块放入long中,然后将其用作键.虽然这是有效的,至少对于我正在测试的数据,我不认为这是一个非常可靠的解决方案,因为关键冲突的可能性增加.

有没有其他方法可以减少字典的内存占用,或者我上面提到的方法并不像我想的那样可怕?

[编辑]为了澄清,我需要保持使用字符串查找字典中包含的值的能力.将实际字符串存储在字典中会占用大量内存.我想要做的是使用一个Dictionary<long,int>long,其中long是字符串上的散列函数的结果.

c# dictionary memory-management data-structures

9
推荐指数
3
解决办法
8011
查看次数

SQL查询在一系列ID中返回每个ID的前N行

假设我有一个包含几亿行的表,看起来像这样:

memID | foo  | bar  | foobar
1     | blah | blah | blah
1     | blah | blah | blah
1     | blah | blah | blah
1     | blah | blah | blah
1     | blah | blah | blah
1     | blah | blah | blah
1     | blah | blah | blah
2     | blah | blah | blah
2     | blah | blah | blah
2     | blah | blah | blah
2     | …
Run Code Online (Sandbox Code Playgroud)

sql database sql-server optimization

2
推荐指数
1
解决办法
4222
查看次数