簡體   English   中英

低RAM上的C#程序-后台工作人員在結束之前未完成DoWork任務

[英]C# program on low ram - backgroundworker not completing DoWork task before ending

我目前正在嘗試在具有i7處理器,512 mb ram並運行w7 Ultimate的VPS上運行用C#(Web請求)編寫的Web機器人。 該程序使用后台工作人員完成主要工作,而不凍結GUI。

但是,每當我嘗試運行該程序時,它都意外結束(顯示我對bgw workcompleted事件的提示),而沒有運行程序的主要部分。

512 MB的ram內存太低而無法運行該程序嗎? 當我嘗試運行它時,它接近最大使用率。 我自己的計算機可以自行運行機器人。 該機器人從三個Richtextbox中獲取用戶輸入,並將它們存儲到字符串數組中,每個數組都有大約3k個條目。

我的工作代碼:

 private void mainWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        var values = (UserInputData)e.Argument;
        int submits = 0;
        string[] emaillist = values.emails;
        string[] addresses = values.addys;
        string[] allname = values.names;
        int addresscount = 0;
        for (int i = 0; i < emaillist.Length; i++)
        {
            string emailAddress = emaillist[i];
            string addy = addresses[addresscount];
            string[] addysplit = addy.Split('|');
            string street = addysplit[0];
            string city = addysplit[1];
            string state = addysplit[2].Substring(0, 2);
            string zip = addysplit[3];
            string name = allname[i];
            string[] namesplit = name.Split('|');
            string fname = namesplit[0];
            string lname = namesplit[1];

            mainWorker.ReportProgress(1, emailAddress);
            HttpSession submit = new HttpSession();
            submit.setUserAgent();
            submit.getPage("");

            string postDataEmail = "...";

            if (submit.html.Contains(".."))
            {
                submits++;
                mainWorker.ReportProgress(90, submits.ToString());
                continue;
            }
            else
            {
                mainWorker.ReportProgress(50);
                Image captchaImg = getImage(captchaUrl);


                string postdata = "...";

                submit.postPage("...", postdata);

                if (submit.html.Contains("..."))
                {
                    submits++;
                    saveToTextFile("submitted emails", emailAddress);
                    saveToTextFile("info", emailAddress + ":" + addy + ":" + name);
                    mainWorker.ReportProgress(90, submits.ToString());

                }
                else if (submit.html.Contains("Enter code in field"))
                {
                    mainWorker.ReportProgress(80);
                    decap.reportBadCaptcha();
                    i--;
                    addresscount++;
                    continue;
                }


                addresscount++;
            }
        }
    }

emaillist數組是通過一個值的richtextbox填充的。 我的reportprogress事件處理程序將一條消息打印到gui,以讓我知道我在執行過程中的位置。 通過for循環運行將始終顯示至少一條消息。

代碼可以正常運行,並且可以在我自己的計算機上正常執行。 在我提到的服務器上運行此命令似乎無法解決問題。

聽起來,我認為這是線程管理問題。 您的i7應該具有12個可用線程,優先級,並且工作站上的負載可能會影響其執行方式。 試用線程池並保持程序運行,直到執行完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM