2016-11-19 78 views
-1

如何獲得最快結果 我寫下面的代碼。如何快速創建ip範圍?

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

但是我的用戶告訴我,它的速度很慢。我沒有任何想法如何提高進展。分享問題,也許 有人知道。謝謝。

+0

什麼是作家?它是緩衝流嗎?爲什麼每個ip的'setText'? – bansi

+1

我不明白你在做什麼。出於某種原因,你正在寫0.0.0.0到255.255.255.255?爲什麼你需要4個索引來做到這一點?你爲什麼要這麼做呢? –

+0

那麼,你正在生成40 GB的數據順序,4294967296'string.formats'和UI更新......當然需要一段時間。在您生成的實際IP中更具體。你需要'9.0.45.2'嗎? – Jens

回答

1

您可以IPAddressRange嘗試:https://www.nuget.org/packages/IPAddressRange/

,但它仍然是很長的,如果你想獲得的所有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

對於整個IPv4範圍'StringBuilder'將不起作用。我不認爲它可以容納40GB +數據 – bansi

+0

沒關係,我可以寫一堆ips。使用Stream.Write(buffer,offset,count);作爲一個例子沿着一條線。 –

1

您正在節省256個4項的功率。這是超過40億電話setText。如果您需要需要來創建許多項目,則必須查看setText的性能。你的循環是高性能的,如果你可以優化setText不清楚,因爲我不知道它是什麼。但是任何你做了40億次的事情可能會很慢。