2011-10-12 2 views
3

J'ai oublié mon mot de passe d'un certificat .pfx x509, j'ai donc décidé que je voulais essayer de le renforcer. Je suis donc allé tester et écrit le code suivant:Pourquoi utiliser rawData plus lentement que l'accès direct aux fichiers

 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 
      { 

      } 
     } 

Je sais qu'il est loin d'être optimale, mais ce n'est pas ce que ma question concerne. C'était un peu lent, alors j'ai pensé, je peux utiliser la surcharge rawData au lieu de lui donner le chemin d'accès. Donc, je l'ai fait le code suivant:

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

buffer est un byte[]; En dehors de la boucle je viens de le charger avec les données brutes du fichier avec un BinaryReader.

Seul ce code est 3 fois plus lent. Pourquoi donc?

Modifier: J'ai exécuté ce code 100 fois maintenant, donc ce n'est pas une simple coïncidence.

+0

Il semble que votre titre et votre texte soient contradictoires, lequel est le plus rapide? La variante de données brutes ou celle où vous passez le chemin? – RedX

+0

Je suis désolé, ils sont en effet. L'utilisation de l'accès direct au fichier est en fait plus rapide;) –

+0

J'imagine que c'est parce que le gestionnaire de cache disque/windows gère les choses plus efficacement que votre simple cache d'octets. Intéressant cependant. – asawyer

Répondre

0

Peut-être que le cache disque est non géré, donc plus rapide?

Questions connexes