2012-02-15 3 views
0

범위 IP의 핑 진행 상황을 표시하는 진행률 표시 줄이있는 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 수를 더 빨리 계산할 수있는 더 좋은 솔루션이 있습니까?

나는 항상 IP의 제한이 10K 주소로 예를 들어 핑 (ping) 주소를 넣을 수 있지만, 난 그냥이 프로그램의 모든 기능을 제한하고 싶지 않아요.

아이디어가 있으십니까?

+0

은 int로 변환하고, 그 차이를 계산합니다. 많은 중복이 있습니다. – CodesInChaos

+0

아직도 그 프로젝트에서 일하고 있습니까? : D – BlackBear

+0

@BlackBear, 나는 단지 그것을 완벽하게 노력하고, 조금 떨어져했다 :) 나는 범위가 너무 크면 내 프로그램 10 분 등에 박히 것으로 나타났습니다 그래서 나는 그 문제를 해결하고자합니다. – HelpNeeder

답변

1

귀하의 문제는,리스트 나 배열과 같은 일부 데이터 구조를 생성하는 IP 주소의 각을 포함하고 있다는 점이다. for 루프를 사용하여 루프를 반복하면 시작하기 전에 필요에 따라 생성되므로 루프를 반복하면됩니다.

당신이 여러 스레드를 사용 Parallel.For 같은 것을 사용하여 시도하려는 때문에.

+0

아, 그래서 당신은 기본적으로 나는 많은 양의 데이터를 만들어서 그것을 메모리에 저장한다고 말하고 있습니까? 글쎄, 이건 이상 하네. 네가 여기서 좋은 점을 가지고 있다고 생각해. 내가 왜 스레드를 사용하여 빠르게 작동하는지 이해할 수는 없지만. 나는 그것을 다시 확인해야한다. 감사. – HelpNeeder

+0

좋아, 문제의 원인을 발견했다. 그것은 (원래 생각했던대로) 계산이 아니었지만, 나는 app 메모리를 만드는 다른 스레드의 모든 ping을로드하는 for 루프를 가지고있었습니다. – HelpNeeder

관련 문제