<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      關(guān)于 HashCode做key的可能性

      最近在設(shè)計(jì)一個(gè)分布式的key-value系統(tǒng)的時(shí)候中,出于性能和存儲(chǔ)空間的考慮,準(zhǔn)備把string類型的key替換為它的HashCode值.

      GetHashCode這個(gè)方法可能很多人都有所了解,不熟悉的可以看看這里:http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode.aspx

      以下信息只限于String.GetHashCode,其他的例如Object.GetHashCode根據(jù)其他對(duì)象的實(shí)現(xiàn)不同而不同:

      1.對(duì)于不同的對(duì)象類型,或者同類型的不同值,返回值是可能重復(fù)的

      2.String.GetHashCode的實(shí)現(xiàn)是平臺(tái)相關(guān)的,32位版本和64位版本并不一樣

      3.String.GetHashCode的實(shí)現(xiàn)和.net版本有關(guān),將來(lái)可能還會(huì)改變

      4.同樣的程序集,同樣的平臺(tái),同樣的字符串, 返回同樣的HashCode

      5.基于默認(rèn)實(shí)現(xiàn),雖然對(duì)象是會(huì)重復(fù)的,但是由于hashcode是int32類型并且實(shí)現(xiàn)的比較良好,那么只有當(dāng)數(shù)據(jù)量達(dá)到或者接近2^32數(shù)量級(jí)的時(shí)候才需要考慮重復(fù)的情況

      • 2^32次方大約在40多億
      • 假設(shè)有1千萬(wàn)數(shù)據(jù),那么有一條或者多余一條數(shù)據(jù)重復(fù)的可能性約為400分之一 (這個(gè)概率對(duì)于一個(gè)要求較高的系統(tǒng)來(lái)說(shuō)太危險(xiǎn)了,而且現(xiàn)在很多系統(tǒng)的數(shù)據(jù)是遠(yuǎn)大于千萬(wàn)級(jí)別的)

      6. .net4.0里面String.GetHashCode的實(shí)現(xiàn)代碼如下

              // Gets a hash code for this string.  If strings A and B are such that A.Equals(B), then 
      // they will return the same hash code.
      [System.Security.SecuritySafeCritical] // auto-generated
      [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
      public override int GetHashCode() {
      unsafe {
      fixed (char *src = this) {
      Contract.Assert(src[this.Length] == '\0', "src[this.Length] == '\\0'");
      Contract.Assert( ((int)src)%4 == 0, "Managed string should start at 4 bytes boundary");

      #if WIN32
      int hash1 = (5381<<16) + 5381;
      #else
      int hash1 = 5381;
      #endif
      int hash2 = hash1;

      #if WIN32
      // 32bit machines.
      int* pint = (int *)src;
      int len = this.Length;
      while(len > 0) {
      hash1 = ((hash1 << 5) + hash1 + (hash1 >> 27)) ^ pint[0];
      if( len <= 2) {
      break;
      }
      hash2 = ((hash2 << 5) + hash2 + (hash2 >> 27)) ^ pint[1];
      pint += 2;
      len -= 4;
      }
      #else
      int c;
      char *s = src;
      while ((c = s[0]) != 0) {
      hash1 = ((hash1 << 5) + hash1) ^ c;
      c = s[1];
      if (c == 0)
      break;
      hash2 = ((hash2 << 5) + hash2) ^ c;
      s += 2;
      }
      #endif
      #if DEBUG
      // We want to ensure we can change our hash function daily.
      // This is perfectly fine as long as you don't persist the
      // value from GetHashCode to disk or count on String A
      // hashing before string B. Those are bugs in your code.
      hash1 ^= ThisAssembly.DailyBuildNumber;
      #endif
      return hash1 + (hash2 * 1566083941);
      }
      }
      }

       

      考慮到GetHashCode依賴.net版本和平臺(tái),還有重復(fù)概率..還是放棄了用HashCode來(lái)代替Key的想法

      最終選擇使用md5 (16 bytes)

      posted on 2011-12-06 11:17  聽(tīng)說(shuō)讀寫  閱讀(3446)  評(píng)論(1)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: 久久精品国产国产精品四凭| 九九热在线观看视频免费| 国产资源精品中文字幕| 中文字幕一区二区人妻| 疏勒县| 新婚少妇无套内谢国语播放| 一区二区三区四区黄色网| 日本一道一区二区视频| 成人国产av精品免费网| 婷婷色香五月综合缴缴情香蕉| 道真| 日本免费一区二区三区久久| 云南省| 苍井空毛片精品久久久| 九九成人免费视频| 麻豆最新国产AV原创精品| 亚洲小说乱欧美另类| 国产免费视频一区二区 | 九九在线精品国产| 激情97综合亚洲色婷婷五| 亚洲国产精品久久久久4婷婷| 九九综合va免费看| 精品无码国产一区二区三区51安 | 亚洲人成网站观看在线观看| 一区二区三区四区亚洲自拍| 亚洲va韩国va欧美va| 一区二区三区激情免费视频| 在线涩涩免费观看国产精品 | 久久久无码精品亚洲日韩蜜桃| 国产亚洲欧美精品久久久| 国产精品国产亚洲区久久| 91中文字幕在线一区| 亚洲一区二区三区激情在线| 丁香五月婷激情综合第九色 | 免费国产又色又爽又黄的网站| 日韩熟女乱综合一区二区| 2019亚洲午夜无码天堂| 在线高清免费不卡全码| 四虎永久在线高清免费看| 97亚洲熟妇自偷自拍另类图片| 精品国产片一区二区三区|