2012-02-15 10 views
0

私は範囲IPのpingの進行状況を表示するプログレスバーを持っているアプリケーションをpingしています。2つのIPアドレスから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))); 
ここでの問題は、私はそれを取る1.0.0.0するには、0.0.0.0から始まる範囲を置くということです

範囲を計算するためにひどい時間がかかるため、値をプログレスバーの最大値に渡します。 IPの数をより速く計算するためのよりよい解決策はありますか?

私はいつもpingにIPアドレスの制限をたとえば10kアドレスに設定できますが、このプログラムの機能を制限したくないだけです。

アイデア?

+0

intに変換し、その差を計算します。たくさんの重複があります。 – CodesInChaos

+0

まだそのプロジェクトに取り組んでいますか? :D – BlackBear

+0

@BlackBear、私はちょっとしたことをやってみたが、完璧にしようと思った。範囲が大きすぎるとプログラムが10分ぐらい止まってしまうので気をつけた。 – HelpNeeder

答えて

1

問題は、各IPアドレスを含むリストや配列のようなデータ構造を作成していることです。あなたがする必要があるのは、forループのようなものでそれらを反復するだけなので、開始前よりも必要に応じて生成されるからです。

複数のスレッドを使用したいので、Parallel.Forのようなものを試してみてください。

+0

ああ、基本的に私は大量のデータを作成してメモリに置いていると言っていますか?まあこれは変だと私はあなたがここでいくつかの良い点を持っているかもしれないと思う。私はそれがなぜスレッド外で速く動作するのか分からないが。私はそれを二重にチェックしなければならない。ありがとう。 – HelpNeeder

+0

さて、問題の原因がわかりました。それは計算ではありませんでしたが(私はもともと考えていましたが)、私はforループを持っていました。 – HelpNeeder

関連する問題