【问题标题】:how to create an ip range fast as fast as possible? [closed]如何尽可能快地创建 IP 范围? [关闭]
【发布时间】:2017-04-03 04:54:51
【问题描述】:

如何获得最快的结果 我在下面写代码。

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

但我的用户告诉我它的速度太慢了。我不知道如何促进进展。分享问题,也许 有人知道。谢谢。

【问题讨论】:

  • 什么是作家?它是缓冲流吗?为什么每个 ip 都使用setText
  • 我不明白你在做什么。您出于某种原因从 0.0.0.0 写入 255.255.255.255 ?为什么需要 4 个索引来完成它?你为什么要这样做?
  • 嗯,你正在生成大约 40 GB 的数据,4294967296 string.formats 和 UI 更新......当然这需要一段时间。在您生成的实际 IP 中更具体。你需要9.0.45.2吗?
  • 这是整个 IPv4 范围!!!!!!
  • @Jens 不是 IBM 的 IP 吗?

标签: c# for-loop ip ip-address filestream


【解决方案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);
    }

【讨论】:

  • 对于整个 IPv4 范围 StringBuilder 将不起作用。我不认为它可以容纳 40GB+ 数据
  • 没关系,我可以写一堆ip。使用 Stream.Write(buffer, offset, count);作为线程旁边的示例。
【解决方案2】:

您节省了 256 的 4 个项目的幂。这是超过 40 亿次对 setText 的调用。如果您需要创建这么多项目,则必须查看 setText 的性能。您的循环足够高效,如果您可以优化 setText 尚不清楚,因为我不知道它的作用。但是任何你做 40 亿次的事情都可能很慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多