2016-11-19 3 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

글쎄, 당신은 4294967296'string.formats'와 UI 업데이트로 40GB의 데이터를 생성하고 있습니다 ... 물론 시간이 좀 걸립니다. 생성중인 실제 IP에서보다 구체적으로 설명하십시오. '9.0.45.2'가 필요합니까? 전체 IPv4 범위 인 – 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

은 작동하지 않습니다. 나는 그것이 40GB + 데이터를 수용 할 수 있다고 생각하지 않는다. – bansi

+0

괜찮아. 나는 ips의 무리를 쓸 수 있었다. Stream.Write (buffer, offset, count)를 사용하여; 예를 들어 스레드와 나란히. –

1

4의 힘으로 256의 생명력을 소비합니다. 그것은 setText에 40 억 건이 넘는 전화입니다. 많은 항목을 작성하려면 이 필요하면 setText의 성능을 조사해야합니다. 귀하의 루프가 충분히 performant이고 최적화 할 수 있다면 setText은 그것이 무엇을하는지 모르기 때문에 불분명합니다. 그러나 40 억 번이나하는 일은 아마도 느려질 것입니다.