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/...
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
Vous devez vous connecter pour publier un commentaire.
Votre code s'exécute tout le code sur un seul fil, vous n'êtes pas l'utilisation de plusieurs threads. Aussi, pourquoi avez-vous un
Thread.Sleep
là?Essayez ce qui suit:
all
l'IPsPingIP
pour chaque adresse IPRemarque: Vous pouvez également lancer un nouveau thread à chaque fois que vous obtenez une nouvelle ligne à partir de la base de données
Exemple:
que voulez-vous dire que le projet est en panne? Regarde mon exemple, vous devriez être en mesure d'exécuter le code que vous voulez APRÈS la boucle foreach et le ping arrivera encore sur des threads différents.
comment puis-je mettre à jour chaque
label.Text
? J'ai une liste d'adresses IP sur l'INTERFACE utilisateur.Mettre le code pour mettre à jour le texte de l'étiquette dans la même fonction que le ping et la mise à jour de l'étiquette au moment de l'intervention est de retour.
OriginalL'auteur Omar
Ce que je voudrais faire est d'avoir un multi-threadé cours d'exécution en arrière-plan, en faisant des pings, et de mettre les résultats dans une base de données. Avoir une page qui se charge des résultats via AJAX plus tard.
OriginalL'auteur Brad
D'envisager de faire un appel système pour la fping utilitaire. Certes, ce ne sont pas gérées de code, mais fping est très bien optimisé pour votre tâche spécifique et de simplifier votre problème à un seul appel, suivi par le traitement de texte de la liste de résultats.
OriginalL'auteur phatfingers
vous pouvez utiliser powershell
et ensuite utiliser
resultat("ping -l 10 -n 2 " + your_ip);
OriginalL'auteur user3218923