像往常一样,我会说可能有类似的主题。但是我没有找到它,或者我用谷歌搜索得很糟糕。我尝试了我找到的所有东西,但我需要专门的提示或帮助。
我需要优化页面的输出及其处理(例如,查找单词并记下数字或从页面中获取数据)。但是页面是非常大的屏幕:
我不知道,也许对于一个很小的人来说,我在 2 秒内处理它,有时在 5 或 10 秒内。但它可以更快吗?并在一般情况下优化输出和处理。将来,我想做一个多线程模式,即解析几个站点。但它们也一样大。而且我不知道如何快速处理页面,或者如何获得更小的响应,但是数据会更少,我将无法解析所有内容。
现在我有List<string>
特定的单词,我检查给定页面上这些单词的数量。据我了解,如果我将这样的页面写入字符串,它就会存储在程序内存中。
这是代码:控制台应用程序。主类Program调用ServiesCheck构造函数,该构造函数接受设置(作为类的集合,1 个类 - 设置)。
new ServiesCheck(settingslist);
构造函数ServiesCheck
遍历设置(引用)并调用方法在构造函数中,我调用方法:ControlSettingsServies()
private bool ControllSettingsServies(ServiesSettings setting, CookieContainer containerCookies)
{
if (setting.oneChecked)
{
var onecheckerservies = OneCheckServies(setting.settingsCheck, containerCookies, setting.linkServis);
if (onecheckerservies.isValid)
{
Console.WriteLine("Нашел");
return true;
}
else
{
Console.WriteLine("Не нашел");
return false;
}
}
return false;
}
在该方法中,我调用 OneCheckServies(它接受我准备好的 cookie、我将处理输出的设置以及要遵循的链接)
private (bool isValid, int[] countSearch, string ResHtml) OneCheckServies(ServiesSettingCheck settingsCheck, CookieContainer containercookies, string link)s
{
var startTime = System.Diagnostics.Stopwatch.StartNew();
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(link);
request.CookieContainer = containercookies;
request.AutomaticDecompression = DecompressionMethods.GZip;
//request.Proxy = null;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie];
bool isSerach = false;
string responceTextHtml = "";
int[] countSerchList = new int[settingsCheck.worldSerach.Count];
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream))
{
string line = "";
while ((line = reader.ReadLine()) != null) {
responceTextHtml += line + "\n";
foreach (string worldS in settingsCheck.worldSerach) {
if (countSerchList[settingsCheck.worldSerach.IndexOf(worldS)] <= settingsCheck.closeFoundNum) {
if (line.Contains(worldS)) {
countSerchList[settingsCheck.worldSerach.IndexOf(worldS)] += 1;
}
}
}
}
}
}
for (int i = 0; i < countSerchList.Length; i++) {
if (countSerchList[i] > settingsCheck.closeFoundNum) {
isSerach = true;
}else {
isSerach = false;
break;
}
}
startTime.Stop();
var resultTime = startTime.Elapsed;
Console.WriteLine(String.Format("{0:00}:{1:00}:{2:00}.{3:000}",
resultTime.Hours,
resultTime.Minutes,
resultTime.Seconds,
resultTime.Milliseconds));
var result = (isSerach, countSerchList, responceTextHtml);
response.Close();
return result;
}
代码对你来说可能很糟糕,但我不能这样做,而且我不知道。
- 如何优化输出?
- 如何优化搜索?
- 如果需要,还可以进行内存优化。 或者是边际速度(从 2 到 10 秒)?
将来,我需要使用这个找到的页面进行进一步的操作。