我目前正在尝试在具有i7处理器,512 mb ram的VPS上运行用C#(Web请求)编写的Web机器人,并运行w7 ultimate。该程序使用后台工作程序来完成主要工作,以免冻结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++;
}
}
}
电子邮件列表数组是从富文本框的值填充的。 我的reportprogress事件处理程序向gui打印一条消息,让我知道我在执行期间的位置。在for循环中运行将始终显示至少一条消息。
代码运行正常并在我自己的计算机上正常执行。在我提到的服务器上运行这个,我似乎无法解决这个问题。
答案 0 :(得分:0)
通过它的声音,我认为这是一个线程管理问题。您的i7应该有12个线程可用,优先级和工作站上的负载可能会影响它的执行方式。试用threadpool并保持程序运行直到执行完毕