【问题标题】:How to calculate number of IP's from 2 IP addresses more efficiently?如何更有效地计算来自 2 个 IP 地址的 IP 数量?
【发布时间】:2012-02-15 16:52:52
【问题描述】:

我正在开发 ping 应用程序,其中有一个进度条,显示 ping 范围 IP 的进度。

这是我计算 IP 范围以设置为进度条最大值的方式:

pbProgress.Maximum = 1 + (IPAddress.NetworkToHostOrder
    (BitConverter.ToInt32(IPAddress.Parse(txtTo.Text).GetAddressBytes(), 0)) -
    IPAddress.NetworkToHostOrder(BitConverter.ToInt32
    (IPAddress.Parse(txtFrom.Text).GetAddressBytes(), 0)));

这里的问题是我把范围从 0.0.0.0 到 1.0.0.0 计算范围需要很长时间,因此将值传递给进度条最大值。有没有更好的解决方案可以更快地计算 IP 数量?

我总是可以限制 IP 地址来 ping,例如 10k 个地址,但我只是不想限制这个程序的任何功能。

有什么想法吗?

【问题讨论】:

  • 将它们转换为int,并计算差异。有很多重复。
  • 还在从事那个项目吗? :D
  • @BlackBear,我稍微休息了一下,只是想完善它 :) 我注意到如果范围太大,我的程序会卡住 10 分钟,所以我想解决这个问题。
  • “可怕的时间”是多少?在我的电脑上它需要不到 1 毫秒。
  • @Gabe:我想他说的是总运行时间 ip 地址 ping 时间包括在内

标签: c# ip range ping


【解决方案1】:

您的问题是您正在创建一些数据结构,例如列表或数组,其中包含每个 IP 地址。您需要做的就是使用for 循环之类的方式对它们进行迭代,以便根据需要而不是在开始之前生成它们。

由于您想使用多个线程,请尝试使用 Parallel.For 之类的内容。

【讨论】:

  • 啊,所以你是说我基本上是在创建大量数据并将其放入内存中?好吧,这很奇怪,我认为您可能在这里有一些好处。虽然我不明白为什么它在没有线程的情况下工作得很快。我必须仔细检查。谢谢。
  • 好的,我找到了问题的原因。这不是计算(正如我最初认为的那样),但我有一个 for 循环,它将每个 ping 加载到其他线程上,从而导致应用程序内存占用。
猜你喜欢
  • 2013-07-17
  • 2015-08-19
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多