2016-07-17 5 views
0

私は以下のIP範囲の文字列を持っている:私はIPをカウントし、ArrayListのに追加するためのコードを使用計算IP IPでの範囲

Dim IPRange as String = "192.168.0.1-192.168.0.100" 

Dim beginIP() As Byte = IPAddress.Parse(IPRange.Split("-")(0)).GetAddressBytes 
Array.Reverse(beginIP) 
Dim endIP() As Byte = IPAddress.Parse(IPRange.Split("-")(1)).GetAddressBytes 
Array.Reverse(endIP) 

Dim IPbegin As UInt32 = BitConverter.ToUInt32(beginIP, 0) 
Dim IPend As UInt32 = BitConverter.ToUInt32(endIP, 0) 
Dim total as Integer = 0 
Dim arr as New ArrayList() 

For i As UInt32 = IPbegin To IPend 
    Dim IPbyte() As Byte = BitConverter.GetBytes(i) 
    Array.Reverse(IPbyte) 
    Dim IPCheck As String = New IPAddress(IPbyte).ToString 
    total += 1 
    arr.Add(IPCheck) 
Next 

をしかし、私は億IPとそのように千IPRangeを持っています、私のアプリケーションを非常に遅くするループ。この場合、このコードやIP範囲を計算する別の方法をどのように高速化できますか?

+0

マルチスレッドを使用しますか? –

+1

私はコードを実行し、何千もの問題はありませんでした。数百万が数秒で生産されました。問題がある場合は、問題のコードを表示していません。 – dbasnett

+0

'ArrayList'を使用しないでください。非常に古いです。代わりに 'List(Of T)'を使用してください。 –

答えて

1

これらの結果を生み出し、より大きな範囲でコード

Dim stpw As Stopwatch = Stopwatch.StartNew 

    Dim IPRange As String = "192.168.0.0-192.200.255.255" 
    Dim beginIP() As Byte = IPAddress.Parse(IPRange.Split("-"c)(0)).GetAddressBytes 
    Array.Reverse(beginIP) 
    Dim endIP() As Byte = IPAddress.Parse(IPRange.Split("-"c)(1)).GetAddressBytes 
    Array.Reverse(endIP) 

    Dim IPbegin As UInt32 = BitConverter.ToUInt32(beginIP, 0) 
    Dim IPend As UInt32 = BitConverter.ToUInt32(endIP, 0) 
    Dim total As Integer = 0 

    For i As UInt32 = IPbegin To IPend 
     Dim IPbyte() As Byte = BitConverter.GetBytes(i) 
     Array.Reverse(IPbyte) 
     Dim IPCheck As String = New IPAddress(IPbyte).ToString 
     total += 1 
    Next 

    stpw.Stop() 
    Debug.WriteLine("{0:n0} in {1}", total, stpw.Elapsed) 

を使用します。

2,162,688 00:00:00.3756208

関連する問題