2016-11-19 2 views
-1

Wie bekomme ich das schnellste Ergebnis Ich schreibe den Code unten.Wie erstelle ich einen IP-Bereich so schnell wie möglich?

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)); 
        } 

aber meine Benutzer sagten mir, dass es langsam gestaut ist. Ich habe keine Ahnung, wie ich den Fortschritt steigern kann. teile das Problem, vielleicht jemand weiß das. Vielen Dank.

+0

was ist der schreiber? ist es gepufferter Strom? Warum 'setText' für jede IP? – bansi

+1

Ich verstehe nicht, was Sie tun. Sie schreiben aus irgendeinem Grund zwischen 0.0.0.0 und 255.255.255.255? Warum brauchst du 4 Indizes dafür? Und warum machst du es überhaupt? –

+0

Nun, Sie generieren in der Größenordnung von 40 GB Daten, mit 4294967296 'string.formats' und UI-Updates ... natürlich dauert es eine Weile. Spezifischer in den tatsächlichen IPs, die Sie generieren. Benötigen Sie '9.0.45.2'? – Jens

Antwort

1

Sie können mit IPAddressRange versuchen: https://www.nuget.org/packages/IPAddressRange/

Aber es wird noch sehr lange dauern, wenn Sie alle ipv4 Bereich erhalten möchten!

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

für den gesamten IPv4-Bereich 'StringBuilder' wird nicht funktionieren. Ich denke nicht, dass es 40GB + Daten halten kann – bansi

+0

es ist ok, ich könnte Haufen von ips schreiben. Verwenden eines Stream.Write (Puffer, Offset, Count); als ein Beispiel neben einem Thread. –

1

Sie sparen 256 in der Potenz von 4 Elementen. Das sind über 4 Milliarden Anrufe an setText. Wenn Sie benötigen, um so viele Elemente zu erstellen, müssen Sie in die Leistung von setText schauen. Ihre Schleife ist performant genug und wenn Sie optimieren können, ist setText unklar, weil ich nicht weiß, was es tut. Aber alles, was Sie 4 Milliarden Mal tun, wird wahrscheinlich langsam sein.

Verwandte Themen