类型'的例外情况;System.OutOfMemoryException';被扔进C#
我得到了这个错误:类型'的例外情况;System.OutOfMemoryException';被扔进C#,c#,out-of-memory,C#,Out Of Memory,我得到了这个错误: HtmlHelper.GetTagsAndValues(htmlContent); 我读了这篇文章: 如何防止此错误 整体方法: at System.String.Split(String[] separator, Int32 count, StringSplitOptions options) at System.String.Split(String[] separator, StringSplitOptions options) at WebCrawl
HtmlHelper.GetTagsAndValues(htmlContent);
我读了这篇文章:
如何防止此错误
整体方法:
at System.String.Split(String[] separator, Int32 count, StringSplitOptions options)
at System.String.Split(String[] separator, StringSplitOptions options)
at WebCrawler.Logic.CrawlerManager.UseRulesOnHtmlPage(Agencies agency, String pageUrl, List`1 listTagValuePair, RulesGroups ruleGroup) in D:\PROJEKTI\crawler\WebCrawlerSuite\WebCrawler.Logic\CrawlerManager.cs:line 263
at WebCrawler.Logic.CrawlerManager.GetAdvertismentFromHtmlContent(List`1 listTagValuePair, Agencies agency, String pageUrl) in D:\PROJEKTI\crawler\WebCrawlerSuite\WebCrawler.Logic\CrawlerManager.cs:line 191
at WebCrawler.Logic.CrawlerManager.ImportAdvertisment2Database.Work(Crawler crawler, PropertyBag propertyBag) in D:\PROJEKTI\crawler\WebCrawlerSuite\WebCrawler.Logic\CrawlerManager.cs:line 668
at WebCrawler.Logic.CrawlerManager.ImportAdvertisment2Database.Process(Crawler crawler, PropertyBag propertyBag) in D:\PROJEKTI\crawler\WebCrawlerSuite\WebCrawler.Logic\CrawlerManager.cs:line 584
我建议您查看内存分析器,以确保应用程序中没有任何泄漏。如果你说它发生在应用程序运行12小时之后,那么这似乎表明它可能是一个缓慢的泄漏,最终导致OutOfMemory异常 有很多方法可以让你保持引用的一致性,这会导致缓慢的泄漏。运行探查器将帮助您识别这些问题。可能不是一行代码导致了问题。这可能只是因为一行代码经常会让你看到让骆驼倒下的稻草 我以前用过(它有14天的免费试用期),它帮助我降低了内存使用率并提高了性能。我最近似乎经常使用它,但这纯粹是因为我发现它是一个非常有价值的工具
查看他们的一些产品和/或了解如何追踪泄漏 我建议查看内存分析器,以确保应用程序中没有任何泄漏。如果你说它发生在应用程序运行12小时之后,那么这似乎表明它可能是一个缓慢的泄漏,最终导致OutOfMemory异常 有很多方法可以让你保持引用的一致性,这会导致缓慢的泄漏。运行探查器将帮助您识别这些问题。可能不是一行代码导致了问题。这可能只是因为一行代码经常会让你看到让骆驼倒下的稻草 我以前用过(它有14天的免费试用期),它帮助我降低了内存使用率并提高了性能。我最近似乎经常使用它,但这纯粹是因为我发现它是一个非常有价值的工具
查看他们的一些产品和/或了解如何追踪泄漏 你应该重新组织你的代码。“全局”系统。异常捕获器不是一个好主意。移除捕获时,您可以看到异常抛出的确切位置。另见thx。那么你建议哪种类型的错误呢。问题是,我在应用程序运行12小时后出现此错误。此代码多久运行一次?取决于读取html的速度。不到20秒,您就可以运行此程序,直到它获得异常,然后连接visual studio调试器以查看异常发生的位置。您还可以监视内存是否已满。也许你有一些内存泄漏?你应该重新组织你的代码。“全局”系统。异常捕获器不是一个好主意。移除捕获时,您可以看到异常抛出的确切位置。另见thx。那么你建议哪种类型的错误呢。问题是,我在应用程序运行12小时后出现此错误。此代码多久运行一次?取决于读取html的速度。不到20秒,您就可以运行此程序,直到它获得异常,然后连接visual studio调试器以查看异常发生的位置。您还可以监视内存是否已满。也许你有一些内存泄漏?+1用于Ants分析器。另外,请特别注意大型对象堆统计信息。这是我一直在做的OOMs的罪魁祸首。我因为没有取消订阅某个特定的表单事件而被刺痛。当表单关闭时,它从未被清理,因此表单(以及它们引用的所有内容)被挂起,无法收集。一个小的变化,它作出了重大的变化。+1的蚂蚁剖析。另外,请特别注意大型对象堆统计信息。这是我一直在做的OOMs的罪魁祸首。我因为没有取消订阅某个特定的表单事件而被刺痛。当表单关闭时,它从未被清理,因此表单(以及它们引用的所有内容)被挂起,无法收集。一个小小的改变,它产生了重大的变化。
public static List<TagValuePair> GetTagsAndValues(string htmlContent)
{
List<TagValuePair> tagsValues = new List<TagValuePair>();
Dictionary<string, int> tagAppearance = new Dictionary<string, int>();
HtmlDocument doc = new HtmlDocument();
if (htmlContent != null)
{
doc.LoadHtml(htmlContent);
if (doc.DocumentNode.SelectNodes("//*") == null)
{
List<TagValuePair> tempList = new List<TagValuePair>();
tempList.Add(new TagValuePair("Error!", htmlContent, -1));
return tempList;
}
foreach (HtmlNode tag in doc.DocumentNode.SelectNodes("//*"))
{
try
{
if (!string.IsNullOrEmpty(tag.InnerHtml.Trim()))
{
if (!tagAppearance.Keys.Contains(tag.Name))
{
tagAppearance.Add(tag.Name, 1);
}
else
tagAppearance[tag.Name] = tagAppearance[tag.Name] + 1;
tagsValues.Add(new TagValuePair(tag.Name, tag.InnerHtml.Trim(), tagAppearance[tag.Name]));
}
else
{
// Help link: http://refactoringaspnet.blogspot.com/2010/04/using-htmlagilitypack-to-get-and-post_19.html
if (!string.IsNullOrEmpty(tag.GetAttributeValue("value", "").Trim()))
{
if (!tagAppearance.Keys.Contains("option value"))
{
tagAppearance.Add("option value", 1);
}
else
tagAppearance["option value"] = tagAppearance["option value"] + 1;
tagsValues.Add(new TagValuePair("option value", tag.GetAttributeValue("value", "").Trim(), tagAppearance["option value"]));
}
if (tag.NextSibling != null && !string.IsNullOrEmpty(tag.NextSibling.InnerHtml.Trim()))
{
if (!tagAppearance.Keys.Contains(tag.Name))
{
tagAppearance.Add(tag.Name, 1);
}
else
tagAppearance[tag.Name] = tagAppearance[tag.Name] + 1;
tagsValues.Add(new TagValuePair(tag.Name, tag.NextSibling.InnerHtml.Trim(), tagAppearance[tag.Name]));
}
}
}
catch (Exception)
{
return null;
}
}
}
doc.LoadHtml(htmlContent);