Register for your free account! | Forgot your password?

Go Back   elitepvpers › Coders Den › .NET Languages
You last visited: Today at 11:34

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



IP-Verwaltung mehrere Threads

Discussion on IP-Verwaltung mehrere Threads within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2016
Posts: 28
Received Thanks: 5
IP-Verwaltung mehrere Threads

Hallo Leute,

ich habe eine große Liste mit IP-Adressen um diese auf Ihre Verfügbarkeit zu testen, Pinge ich diese nacheinander an.
Da jedoch die Liste mehr als 600 Einträge hat dauert dieser Vorgang sehr lange.
Um die Bearbeitungszeit zu verkürzen wollte ich die Funktion in mehreren Threads ausführen. Das Problem war jedoch, dass die
Funktion zwar mehrmals aufgerufen wurde, aber von den Threads die selbe IP bearbeitet wurde. Ich habe mal schnell die Logik
zusammen geschrieben, da ich zurzeit keinen Zugang zu meinem Code habe.

Ich wäre über Lösungsvorschläge sehr dankbar.
Code:
Button_Click Logik
	//Aktuell mit einem Thread
	Thread th = new Thread(new ThreadStart(checkProxy));
	th.start();
	//Erster Versuch, welcher jedoch nicht das gewünschte Ergebniss lieferte.
	Thread th = new Thread(new ThreadStart(checkProxy));
	Thread t = new Thread(new ThreadStart(checkProxy));
	th.start();
	t.start();

checkProxy Logik:
	int Count = Listbox.Items.Count();
	int Curr = 0;
	int Timeout = 5000;
	while(Curr < Count)
	{
		string IP = (string)Listbox.Items[Curr];
		Ping p = new Ping();
		PingReply pr = p.send(IP, Timeout);
		if(pr.status == IPStatus.Success) {
			//Hier wird die IP in 2. Listbox eingefügt
			updateBox(Listbox2, IP)
			//Hier wird die IP aus der 1. Listbox entfernt
			deleteItem(Listbox, IP)
		} else {
			//Hier wird die IP aus der 1. Listbox entfernt
			deleteItem(Listbox, IP)
		}
		Count = Listbox.Items.Count()
                Curr++;
	}
Grade erst gemerkt das ich das ganze im falschen Bereich gepostet habe. Wäre gut wenn jemand das nach .Net verschieben könnte. Danke.
xTrion is offline  
Old   #2
dotCom
 
Devsome's Avatar
 
elite*gold: 10077
The Black Market: 107/0/0
Join Date: Mar 2009
Posts: 17,392
Received Thanks: 4,955
Arrow General Coding -> .NET Languages

#moved
Devsome is offline  
Thanks
1 User
Old   #3




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
bist du sicher dass der Code auch so aussieht ? weil Sie können theoretisch nicht die gleiche IP bearbeiten da du sie ja aus der List entfernst.

Ich weis ja nicht wie C# das handhabt aber sicher ist das Thread Handling ja nicht grade ? gleichzeitiger Zugriff auf die Sachen ohne Synchronisation ist nicht so optimal.
bloodx is offline  
Old   #4
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
1. Du hast keine Sperren verwendet
2. Du löschst den Eintrag erst nach dem Ping, solange der Ping läuft kann jeder andere thread auf das selbe zugreifen, und so ein Ping dauert lange
3. Warum greifst du überhaupt auf die Listbox zu.

Am besten Kopierst du für jeden Thread alle Relevanten einträge, somit müssen die Threads nicht auf geteilten Speicher zugreifen. Ansonsten solltest du Sperren verwenden wenn du auf geteilten Speicher zugreifst.

Noch was am rande, eine Listbox möchte die ganze Zeit neu Zeichnen wenn du die Einträge bearbeitest, das zieht unnötig leistung, also entweder arbeite nicht direkt auf der Listbox oder verwende Begin- bzw Endupdate

warfley is offline  
Thanks
1 User
Old   #5
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
Du könntest auch Parallel.For bzw ForEach nutzen.
#Saiirex is offline  
Reply




All times are GMT +2. The time now is 11:35.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.