Ich schrieb einen einfachen Proxy-Tester auf der Grundlage einiger Code, den ich hier gefunden.C# Proxy-Tester unglaublich langsam sogar auf seinem eigenen Thread
die Grundidee war, lädt es eine Datei, die eine Liste von Proxys in Form von ipaddress enthält: Port, teilt das in ein Array und Tests für die Konnektivität.
Ich führe diese Iteration in einem zweiten Thread, weil es unerträglich langsam war. Es ist jetzt etwas schneller, aber ich hoffe auf einige Vorschläge.
while ((line = reader.ReadLine()) != null)
{
if (this.lblCurrentProxy.InvokeRequired)
{
this.lblCurrentProxy.BeginInvoke((MethodInvoker)delegate() { this.lblCurrentProxy.Text = "Current proxy: " + line; ;});
}
else
{
this.lblCurrentProxy.Text = "Current proxy: " + line;
}
//lblCurrentProxy.Text = "Current proxy: " + line;
String[] addressParts = line.Split(':');
try
{
WebClient wc = new WebClient();
wc.Proxy = new WebProxy(addressParts[0], Int32.Parse(addressParts[1]));
wc.DownloadString("http://google.com/ncr");
sw.WriteLine(line);
//MessageBox.Show("working proxy");
}
catch
{
// do nothing, proxy was dead.
continue;
}
}
Parallel ist etwas, was ich neu bin - können Sie ein wenig erklären, was hier los ist? sieh es zurückkehrenden Eimer, aber zu was? Sehr verwirrt auf diesem .. –
@DanSmith 'Rückkehr Eimer;' Hier ist ein bisschen irreführend. Im Wesentlichen übergibt 'Parallel.ForEach()' eine neue 'Liste' für jeden * Thread * ('() => neue Liste ()') definiert dies. Das bedeutet, dass es jedem Thread freisteht, sich an seinen "Bucket" anzuhängen, ohne irgendwelche Thread-Sicherheitsprobleme. Wenn der threadlokale Typ nun eine * ganze Zahl * wäre, müssten wir den neuen Wert zurückgeben, da eine ganze Zahl nicht änderbar ist. Im Fall einer 'List' möchten wir jedoch einfach an die Liste anhängen und dann die gleiche Liste zurückgeben, die wir erhalten haben. –
Rob
@DanSmith Ich habe ein Beispiel ohne thread-lokale Variablen hinzugefügt, da ich glaube, dass das ablenkt das Ziel hier - sollte ein bisschen leichter zu verstehen sein – Rob