2011-10-12 82 views
3

我忘記了我的.pfx x509證書的密碼,所以我決定嘗試強制它。所以我就去考寫下了下面的代碼:爲什麼使用rawData比直接文件訪問慢

 for (var i = 0; i < 1000; i++) 
     { 
      try 
      { 
       var cert = new X509Certificate2("D:/file.pfx", i.ToString(), X509KeyStorageFlags.MachineKeySet); 
       Console.WriteLine("Found it: " + i); 
      }catch 
      { 

      } 
     } 

我知道這是遠不夠理想,但是這不是我的問題是關於什麼的。這有點慢,所以我想,我可以使用rawData重載而不是給它路徑名。所以我做了下面的代碼:

 for (var i = 0; i < 1000; i++) 
     { 
      try 
      { 
       cert = new X509Certificate2(buffer, i.ToString(), X509KeyStorageFlags.MachineKeySet); 
       Console.WriteLine("Found it: " + i); 
      }catch 
      {} 
     } 

bufferbyte[];在循環之外,我用BinaryReader將文件中的原始數據加載到文件中。

只有這段代碼慢了3倍。這是爲什麼?

編輯:我已經跑了這個代碼,現在已經有100次了,所以它不僅僅是一個隨機的巧合。

+0

看來你的標題和文字是矛盾的,哪一個更快?原始數據變體還是您傳遞路徑的變體? – RedX

+0

我很抱歉,他們的確是。使用直接文件訪問實際上更快;) –

+0

我會想象這是因爲磁盤緩存/窗口管理器正在更有效地處理事情,然後你簡單的字節緩存。雖然有趣。 – asawyer

回答

0

也許磁盤緩存是非託管的,因此更快?