Le moyen le plus rapide de ping une grande liste d'adresses IP?

J'ai une grande liste d'adresses IP dans un datatable et j'ai un ping très rapidement,
J'ai utilisé ce code :

public bool PingIP(string IP)
{
    bool result = false;
    try
    {                
        Ping ping = new Ping();
        PingReply pingReply = ping.Send(IP);
        if (pingReply.Status == IPStatus.Success)
            result = true;
    }
    catch
    {
        result = false;
    }
    return result;
}

alors je l'appelle dans la boucle while :

private void CheckNetworkState()
{
    while (rowindexping > -1)
    {
        if (rowindexping == tbl_ClientInfo.Rows.Count)
        {
            rowindexping = -1;
            return;
        }

        string ip = tbl_ClientInfo.Rows[rowindexping]["clientip"].ToString();
        if (!PingIP(ip))
        {
           do something
        }
        rowindexping++;
        Thread.Sleep(100);
    }
}

Car je veux faire ce travail à l'arrière-plan de mon projet que j'appel de la classe dans un thread:

threadping = new Thread(CheckNetworkState);            
threadping.IsBackground = true;
threadping.Start(); 

mon problème est que cela prend beaucoup de temps et ne travaille pas à l'arrière-plan. je veux dire que le système est occupé jusqu'à ce que toutes les adresses ip dans tbl_clientinfo passer par la table de ping classe.
je veux que la vérification du système toutes les lignes depuis que je suis en train de travailler avec l'autre partie de mon projet.

Ai-je le faire correctement?

Ping ne va PAS être rapide. Pire des cas, chaque unique de ping paquet est ignoré/supprimés/perdu et vous devez attendre que le délai d'expiration pour chaque ping tentative. Pour faire de cette "rapide", vous aurez besoin de déclencher PLUSIEURS pings en même temps.
la vitesse de ping n'est pas de 100% à partir du code, sa communication et réseau
Vous pouvez utiliser un ServerToPing[] et de créer un nombre de threads de travail en parallèle. Ensuite, vous pouvez utiliser des bibliothèques parallèles ou quelque chose comme un sémaphore à exécuter et de la règle de threads...
Je serais peut-être à l'aide de la commande Ping.SendAsync()
stackoverflow.com/questions/13911473/...

OriginalL'auteur maryam mohammadi | 2011-11-06