2010-06-23 11 views
1

J'utilise après deux requêtes WMI:performances pour les requêtes suivantes wmi

SELECT * FROM Win32_Group WHERE LocalAccount=true 
SELECT Domain,Name FROM Win32_UserAccount WHERE LocalAccount=true 

La 2ème requête prend environ 6 secondes pour courir (sur seulement 4 utilisateurs) alors que la 1ère requête prend environ 0,3 secondes pour exécuter plus de 22 groupes. Quelqu'un peut-il me dire pourquoi existe-t-il un tel écart de performance? Et toute autre façon d'écrire la 2ème requête?

EDIT: Je cours la requête sur une machine locale, ainsi les connexions ne devraient pas entrer dans l'image.

Répondre

0

Je suppose que la deuxième requête est lente car elle doit d'abord récupérer tous les utilisateurs du domaine. Si vous ne souhaitez que les utilisateurs locaux de toute façon vous pouvez essayer la méthode décrite here ou limit the query to the local machine:

public static void GetUsers() 
{ 
    SelectQuery sQry = new SelectQuery(“Win32_UserAccount”,“Domain=’PCNAME’”); 

    try 
    { 
     ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(sQry); 

     Console.WriteLine(“User Accounts\n”); 

     foreach (ManagementObject mObject in mSearcher.Get()) 
     { 
      Console.WriteLine(mObject[“Name”]); 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
    }  
} 
+0

Alors pourquoi la 1ère requête exécutée si vite? Les deux vérifient uniquement les comptes locaux. – apoorv020

+0

@ apoorv020: Je ne sais pas avec certitude, mais je suppose que cela a à voir avec la façon dont les groupes sont propagés aux hôtes d'un réseau de domaine. –

+0

J'ai vérifié votre requête et ils ont tous les deux le même timing (pas de chance.) J'ai également essayé Win32_account où LocalAccount = true et sidType = 1. – apoorv020

Questions connexes