Avatar billede nohvok Nybegynder
15. april 2016 - 11:05

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();
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester