Out of Memory, af Timer eller Webbrowser?
Okay, jeg har en kæmpe problem med min Memory i dette program. I omkring en times brug af dette program bliver min hukommelse fyldt. Altså jeg render tør for Ram.Jeg har prøvet at Dispose/Stop alle mine timere uden hjælp.
Så jeg er kommet til at det måske min Webbrowser der fylder min hukommelse op, min webbrowser er realoder en hjemmeside hvert 5-10 sek.
Her har jeg så forsøgt at Dispose min Webbrowser1 for at derefter oprette en ny efter hver Refresh.
Dette har heller ikke afhjulpet mit problem.
Jeg har også arbejdet på at rydde min webbrowser cache, men da jeg er nødt til at være logget ind på hjemmesiden med en bruger og en adgangskode.
Derudover har jeg en anden ting i denne kode jeg kan ikke finde ud af det, hvorfor dens går galt.
Som der kan ses i koden sin finder ud af, om mine nye data fra hjemmesiden er højere eller lavere end var det før i denne:
if (Convert.ToDecimal (label5.Text)> = Convert.ToDecimal (label11.Text))
Men jeg har set et par gange, hvis den får et lavere resultat mere end 13 gange "resetter" den så programmet mener, at dens ikke er lavere mere, og sætter min winlossstr streng til "won", selv om det stadig får et tabt resultat på hjemmesiden.
Til info: data dette program får fra hjemmesiden er et tal eks. sådan her: 125.578
Jeg håber i forstår mit og mit spørgsmål, ellers fortælle mig, hvad du behøver at vide
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();
}