Hallo
ich habe eine Schleife in die ich eine Pause einbringen, damit die schritte nicht zu schnell hintereinander abgearbeitet werden, ein 30 sec takt zb.
gibt es die möglichkeit so etwas in eine schleife einzubauen, und womit?
Hallo Lumpi2001,
Thread.Sleep
Aber beachte [FAQ] Warum blockiert mein GUI?
Unter Umständen ist ein Timer besser geeignet.
herbivore
Setzt dieser Thread Punkt noch weitere sachen vorraus ?
bei mir übergeht der einfach den thread bei 60000 🙁
Sollte noch erwähnen das ich eine Webanwendung habe.
Hallo Lumpi2001,
ohne Code und weitere Details werden dir wir wohl nicht helfen können.
herbivore
ok sorry,
also ich füre s in folgendem typ aus
public void WriteIt()
{
//Erzeugen von Instanzen für City und Url[/PHP]
die schleife befindet sich ca hier
for (int i = 2; i < 10; i++)
{
//Versuch die Vorwahl einer Website auszulesen
try
{
//Ausgabe der zuvor ermittelten Werte
Response.Write("Nummer: " + i);
Response.Write("<br /> Ort: " + mListeCity[i]);
Response.Write("<br /> URL: " + mListeUrl[i]);
Response.Write("<br /> Vorwahlen: ");
//Erzeugen der Vorwahlen zu jeweiligen URL
ReadoutNumbers mclassNumbers = new ReadoutNumbers(mListeUrl[i].ToString());
//Abfrage der Lise der Vorwahlen
ArrayList mListeNumbers = mclassNumbers.Numbers;
//Definieren der Menge an Einträgen einer Liste
int liMengeNumbers = mListeNumbers.Count;
//Schreiben der Nummern unter die Website
for (int j = 0; j < liMengeNumbers; j++)
{
Response.Write(mListeNumbers[j]);
Response.Write(";");
}
Response.Write("<br /><br />");
}
//Bei Misserfolg, ausgabe eines Errors
catch
{
Response.Write("ERROR");
Response.Write("<br /><br />");
}
Thread.Sleep(60000);
}
Ich lese bei dieser geschcihte eine webseite mit hilfe einer klasse aus, immer wieder eine andere Site auf der selben Page, und beim zweiten einlesen krieg ich keine antwort mehr vom webserver, daher dachte ich bring ich ne pause rein.
Hallo Lumpi2001,
ich denke, das hat nichts mit der Pause zu tun.
Verstehen tue ich den Code allerdings nicht ganz. Wo ist denn die Stelle, wo die WebSeite gelesen wird?
herbivore
Hallo,
sorry das ich jetzt erst Antworte aber war im Urlaub.
das auslesen der Website selber findet in einer externen Klasse statt.
Das Pause problem habe ich so gelöst
//Pause von ca 1000 Sekunden durch While Schleife durch auslesen und prüfen des Datumes.
do
{
ldateAktuell = DateTime.Now;
}
while ( DiffSeconds(ldateKriterium, ldateAktuell) <= 1000 );
Es ist zwar nicht sauber, aber erfüllt seinen Zweck.
Problem ist nur, es ist nicht der Verursacher meines eigentlichen Problemes, den egal wie schnell, langsam ich die einzelnen Seiten auslese, es gibt immer wieder nach dem 3ten Datensatz ein Problem.
Darum werd ich wohl nochmal einen neuen Thread starten müssen.
Aber danke euch nochmal.
Hallo Lumpi2001,
Es ist zwar nicht sauber, aber erfüllt seinen Zweck.
auch wenn du schon selber sagst, dass das nicht sauber ist, muss ich - auch für andere Leser dieses Threads - noch einen drauf setzen und sagen: das ist nicht nur unsauber, sonder richtig großer Mist. Sollte man auf keinen Fall so machen. Es ist auch nicht nötig. Mit Timern bekommt man das sehr viel besser und einfacher hin.
herbivore
Okey danke für den Hinweiß.
da es wie gesagt allerdings nicht mein Problem löst, habe ich es auch bereits wieder entfernt.
Ok ich weiß nicht ob es sich jetzt Lohnt, quasi als kleinen Tip noch nen Thread aufzumachen oder ob ich kurz den Fehler beschreibe und wie ich Ihn gelösst habe.
Darum schreib ich es erstmal hier rein.
Also das Generelle Problem war, das ich aus einer Linkseite jede Seite hinter einem ink auslesen musste, und gleichbleibende Informationen via Regex aus der jeweiligen Seite auslesen musste.
hierzu habe ich folgenden Code genutzt.
public class htmlind
{
private string lsHtmlContent;
private string lsErrorCode;
private DateTime ldScrapTime;
public htmlind(string lsUrl)
{
WebRequest WebReq = WebRequest.Create(lsUrl);
WebResponse WebResp = WebReq.GetResponse();
StringBuilder myBuildContent = new StringBuilder();
ldScrapTime = DateTime.Now;
lsErrorCode ="";
try
{
StreamReader myStreamR = new
StreamReader(WebResp.GetResponseStream(),
System.Text.Encoding.UTF7);
while (-1 != myStreamR.Peek())
{
myBuildContent.Append(myStreamR.ReadLine());
}
}
catch (Exception e)
{
lsErrorCode = e.ToString();
}
lsHtmlContent = myBuildContent.ToString();
}
Mein Problem war jetzt, das nach dem zweiten Link, die hier aufgeführte Klasse den Webresponse nicht mehr ausführen konnte und mir nurnoch ein Error zurückwarf.
Ich bin davon ausgegangen, das dieses Problem auf Seiten der auszulesenden Website lag, und wollte durch den Timer die Zugriffe herabsetzen.
Tatsächlich lag das Problem allerdings an einem Speicherüberlauf der durch den Webresponse durchgeführt wurde, den bei jedem Abfragen wurden Daten in den Speicher geschaufelt aber nicht mehr geleert.
Deshalb habe ich noch folgenden Paramter hinzugefügt, um den Speicher nach jedem Vorgang auch wieder zu leeren.
WebResp.Close();
Disclaimer: Ungetestet, einfach nur hier im Editor geaendert.
Warum nicht so? Geaendert hab ich hier nur, dass using() {} verwendet wird. Und mich wuerde interessieren ob das Peek von dir besser oder schlechter ist als diese Version.
public htmlind(string lsUrl) {
WebRequest WebReq = WebRequest.Create(lsUrl);
using (WebResponse WebResp = WebReq.GetResponse()) {
StringBuilder myBuildContent = new StringBuilder();
ldScrapTime = DateTime.Now;
lsErrorCode ="";
try {
using (StreamReader myStreamR = new StreamReader(WebResp.GetResponseStream(),
System.Text.Encoding.UTF7)) {
string line;
while ((line = myStreamR.ReadLine()) != null)
{
myBuildContent.Append(line);
}
}
} catch (Exception e) {
lsErrorCode = e.ToString();
}
lsHtmlContent = myBuildContent.ToString();
}
}
// Kram hier
}
Pound for pound, plutonium is about as toxic as caffeine when eaten.
Okey, werde mal beide Lösungen mit einem Start und einem Enddate versehen und mal gucken wie die sich so machen.
bei 17.243 einträgen ist ein kleine geschwindigkeitsschub schon wünschenswert .
🙂
Also deine Lösung brauch schonmal 14 min
Komme bei meiner Lösung auch auf 14 min
Also da tut sich nichts .