2016-11-19 3 views
-1

comment obtenir le résultat le plus rapide J'écris le code ci-dessous.comment créer une plage IP rapide aussi vite que possible?

for (int i = 0; i < 256; i++) 
      for (int j = 0; j < 256); j++) 
       for (int k = 0; k < 256; k++) 
        for (int p = 0; p < 256; p++) 
        { 
         writer.WriteLine(string.Format("{0}.{1}.{2}.{3}", i, j, k, p)); 
        } 

mais mes utilisateurs m'ont dit que c'est bloqué lentement. Je n'ai aucune idée de comment stimuler les progrès. partager le problème, peut-être quelqu'un le sait. Merci.

+0

Qu'est-ce qu'un écrivain? est-ce le flux tamponné? pourquoi 'setText' pour chaque ip? – bansi

+1

Je ne comprends pas ce que vous faites. Vous écrivez de 0.0.0.0 à 255.255.255.255 pour une raison quelconque? Pourquoi avez-vous besoin de 4 index pour le faire? Et pourquoi le faites-vous en premier lieu? –

+0

Eh bien, vous générez de l'ordre de 40 Go de données, avec 4294967296 'string.formats' et mises à jour de l'interface utilisateur ... bien sûr, il faut un certain temps. Soyez plus précis dans les adresses IP que vous générez. Avez-vous besoin de '9.0.45.2'? – Jens

Répondre

1

Vous pouvez essayer avec IPAddressRange: https://www.nuget.org/packages/IPAddressRange/

Mais il sera encore très longtemps si vous voulez obtenir toute la gamme ipv4!

var range = NetTools.IPAddressRange.Parse("192.168.0.10 - 192.168.10.20"); 
System.Text.StringBuilder builder = new System.Text.StringBuilder(); 
    foreach (var item in range) 
    { 
     builder.Append(item); 
    } 
+0

pour toute la plage IPv4 'StringBuilder' ne fonctionnera pas. Je ne pense pas qu'il peut contenir 40 Go + données – bansi

+0

c'est ok, je pourrais écrire des tas de ips. en utilisant un Stream.Write (buffer, offset, count); comme exemple le long d'un fil. –

1

Vous économisez 256 à la puissance de 4 éléments. C'est plus de 4 milliards d'appels à setText. Si vous avez besoin de pour créer autant d'éléments, vous devez regarder dans les performances de setText. Votre boucle est assez performante et si vous pouvez optimiser setText n'est pas claire parce que je ne sais pas ce qu'il fait. Mais tout ce que vous faites 4 milliards de fois sera probablement lent.