In Ordnung, Hallo an alle. Hier ist mein Code: Mein Problem ist unter dem Code geschrieben.Speicher voll durch Timer oder Webbrowser? C#
public partial class Form1 : Form
{
Decimal startCoins;
string winlossstr;
int TotalRolls;
int TotalWins;
int TotalLost;
int winloss = 0;
int CountError;
private void timerGetData_Tick(object sender, EventArgs e)
{
if (this.webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
string u = webBrowser1.DocumentText;
u = u.Substring(u.IndexOf("<span id=\"goCoins\" class=\"coins\""));
u = u.Substring(u.IndexOf(">") + 1);
u = u.Substring(0, u.IndexOf("</span>"));
textBoxCoins.Text = u;
//newCount = Convert.ToDecimal(u);
label5.Text = u;
decimal Pstart = Convert.ToDecimal(startCoins);
decimal Pnew = Convert.ToDecimal(u.Replace('.', ','));
decimal p = Convert.ToDecimal(Pnew) - Convert.ToDecimal(Pstart);
labelProfit.Text = p.ToString();
labelToltalRols.Text = TotalRolls.ToString();
//if (newCount >= oldCount)
if (Convert.ToDecimal(label5.Text) >= Convert.ToDecimal(label11.Text))
{
textBoxWinLoose.Text = "Won!";
textBoxWinLoose.BackColor = System.Drawing.Color.Green;
textBoxWinLossCounter.BackColor = System.Drawing.Color.Green;
textBoxBetAmount.Text = textBoxAmount.Text;
winlossstr = "won";
TotalWins++;
labelRollsWon.Text = TotalWins.ToString();
var cl = labelCoinsWon.Text;
var clbet = textBoxBetAmount.Text;
decimal clbet1 = Convert.ToDecimal(clbet.Replace('.', ','));
if (cl == "0")
{
labelCoinsWon.Text = clbet;
}
else
{
decimal clc = Convert.ToDecimal(cl.Replace('.', ',')) + clbet1;
labelCoinsWon.Text = clc.ToString();
}
//DEBUGGER
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Roll Number #" + labelToltalRols.Text + " Bet Amount: " + textBoxBetAmount.Text + " Won!");
richTextBoxHistorik.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Roll Number #" + labelToltalRols.Text + " Bet Amount: " + textBoxBetAmount.Text + " Won!");
}
else
{
textBoxWinLoose.Text = "Loss!";
textBoxWinLoose.BackColor = System.Drawing.Color.Red;
textBoxWinLossCounter.BackColor = System.Drawing.Color.Red;
winlossstr = "loss";
TotalLost++;
labelRollsLost.Text = TotalLost.ToString();
var cl = labelCoinsLost.Text;
var clbet = textBoxBetAmount.Text;
decimal clbet1 = Convert.ToDecimal(clbet.Replace('.', ','));
if (cl == "0")
{
labelCoinsLost.Text = clbet;
}
else
{
decimal clc = Convert.ToDecimal(cl.Replace('.', ',')) + clbet1;
labelCoinsLost.Text = clc.ToString();
}
//DEBUGGER
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Roll Number #" + labelToltalRols.Text + " Bet Amount: " + textBoxBetAmount.Text + " Tabt");
richTextBoxHistorik.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Roll Number #" + labelToltalRols.Text + " Bet Amount: " + textBoxBetAmount.Text + " Tabt");
}
// TIMER
var r = new Random();
var r2 = r.Next(3000, 5000);
timerLoop.Interval = r2;
decimal t = Convert.ToDecimal(r2)/1000;
////DEBUGGER
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Loop starts in " + t + " secs.");
timerLoop.Start();
//oldCount = newCount;
label11.Text = label5.Text;
timerGetData.Stop();
}
else
{
CountError++;
label18.Text = CountError.ToString();
////DEBUGGER
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Website not found. #" + CountError.ToString());
webBrowser1.Navigate(url);
////DEBUGGER
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Reloader data in 10 secs.");
timerGetData.Interval = 10000;
timerGetData.Start();
}
}
private void timerLoop_Tick(object sender, EventArgs e)
{
if (winlossstr == "won")
{
HtmlDocument doc = this.webBrowser1.Document;
doc.GetElementById("bet").SetAttribute("Value", textBoxAmount.Text);
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Setting start bet!");
}
if (winlossstr == "loss")
{
var h = textBoxBetAmount.Text;
decimal n = Convert.ToDecimal(h.Replace('.', ',')) * 2;
textBoxBetAmount.Text = n.ToString();
var j = n.ToString();
HtmlDocument doc = this.webBrowser1.Document;
doc.GetElementById("bet").SetAttribute("Value", j.Replace(',', '.'));
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Setting loss bet to: " + j.Replace(',', '.'));
}
timerClick.Interval = 1000;
timerClick.Start();
timerLoop.Dispose();
}
private void timerClick_Tick(object sender, EventArgs e)
{
TotalRolls++;
HtmlElementCollection elc = this.webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement el in elc)
{
if (el.GetAttribute("id").Equals("roll"))
{
el.InvokeMember("Click");
}
}
timerClick.Dispose();
////DEBUGGER
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Rolled");
timerRefreshPage.Interval = 2000;
timerRefreshPage.Start();
}
private void timerRefreshPage_Tick(object sender, EventArgs e)
{
webBrowser1.Refresh(WebBrowserRefreshOption.Completely);
timerRefreshPage.Stop();
////DEBUGGER
richTextBoxDebugger.AppendText(Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Website loades." + Environment.NewLine + DateTime.Now.ToString("HH:mm:ss") + " Getting data in 1 sec");
GC.Collect();
GC.WaitForPendingFinalizers();
timerGetData.Interval = 2000;
timerGetData.Start();
}
In Ordnung, ich habe ein großes Problem mit meinem Speicher in diesem Programm. In ungefähr einer Stunde, die dieses Programm läuft, wird mein Gedächtnis voll von diesem Programm geladen. Ich habe versucht, alle meine Timer ohne Hilfe zu entsorgen.
So bin ich dazu gekommen, dass vielleicht mein Webbrowser mein Gedächtnis füllt, mein Webbrowser wird alle 5 bis 10 Sekunden nachgestellt. Ich habe versucht, google und auf diesem Stackoverflow den Webbrowser zu entsorgen, fand ich einen Weg, wo ich einen neuen Webbrowser für jede Aktualisierung erstellt habe, aber ich habe nicht auf meine Speicherbelegung geholfen.
Ich habe auch daran gearbeitet, meinen Webbrowser Cache zu löschen, aber ich muss auf der Website mit einem Benutzer und einem Passwort angemeldet sein, so dass mir auch nichts helfen kann.
So jetzt möchte ich Ihnen meinen Code zeigen und hoffen, dass jemand mir sagen kann, was ich tun muss, damit es meinen Widder nicht füllt.
Und dann habe ich eine andere Sache in diesem Code kann ich nicht herausfinden, warum es falsch geht.
In Ordnung, wie Sie den Code sehen kann seine findet heraus, ob meine neue Daten von der Website höher oder niedriger ist es dann, bevor in diese war:
if (Convert.ToDecimal(label5.Text) >= Convert.ToDecimal(label11.Text))
aber ich habe ein paar Mal, wenn er gesehen wird niedriger als 13 Mal, es ist nur "Reset" der Zähler, so dass das Programm denkt, dass es nicht niedriger ist, und setzt meine Winlossstr String auf "gewonnen", auch wenn es immer noch ein Verlust Ergebnis auf der Website.
Fyi die Daten, die dieses Programm von der Website bekommt, ist eine Nummer ex. wie folgt: 125.578
Ich hoffe, Sie verstehen meine und meine Frage, ansonsten bitte sagen Sie mir, was Sie wissen müssen.
Mit freundlichen Grüßen
- Bearbeiten -
Okay, jetzt habe ich das gefunden:
[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);
[DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern IntPtr GetCurrentProcess();
in meinem Timer:
IntPtr pHandle = GetCurrentProcess();
SetProcessWorkingSetSize(pHandle, -1, -1);
Aber das ist tut mir helfen entweder geht meine Erinnerung weiter. und es wird nicht aufhören.
Hallo Bassfader, eigentlich habe ich bereits versucht, dass ich denke, nicht ganz sicher .. weil ich das gleiche Problem hatte, bevor ich diese Richtextbox erstellt habe, aber ja, ich versuche es später und sagt, wie es geht., Thx für Ihre Antwort ! – Nohvok
In Ordnung, ich kann Ihren Punkt sehen, dass der Append-Text etwas Speicherplatz beansprucht, jetzt nachdem ich alle meine Debugger-Texte entfernt habe.Aber es ist nicht so, dass es das große Problem gibt, meine Speicherauslastung wird immer noch in Betrieb genommen für jede "Rolle" dort eine Marke, in meinen Augen scheint es der Webbrowser zu sein, aber ich weiß jetzt nicht wie ich die Erinnerung halten soll in diesem .. Es scheint für jeden Webbrowser Refesh mein Gedächtnis geht nach oben, nicht zurück nach unten .. – Nohvok