c# - 如何检测和避免无限循环?

标签 c# asp.net performance linq infinite-loop

<分区>

我想确保我的 Web 应用程序性能良好,不会产生任何性能问题。当我搜索时,我发现与性能问题相关的最常见问题之一是“无限循环”问题。

我想问:

我应该从哪里开始检查我的代码不会导致无限循环?

是否有任何文章、建议、说明、示例?我将不胜感激。

例如:

这段代码会导致死循环吗?

public static IEnumerable<SubjectNode> ReadSubjectNodes(string filePath)
{
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
    using (XmlReader xrdr = new XmlTextReader(fs))
        while (xrdr.Read())
            if (xrdr.NodeType == XmlNodeType.Element && xrdr.LocalName == "subject")
                yield return new SubjectNode(xrdr.GetAttribute("id"), xrdr.GetAttribute("name"), xrdr.GetAttribute("short"));
}

提前致谢

最佳答案

好吧,据我所知,代码不会导致无限循环 - 它不是递归的,文件系统中的 XmlReader 最终会耗尽数据。不过,它可能长时间运行。在某些情况下,添加健全性检查可能会有所帮助——这可能是一个计数器,或者是对时间的检查。例如:

public static IEnumerable<SubjectNode> ReadSubjectNodes(string filePath)
{
    int safetyCheck = 10000;
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
    using (XmlReader xrdr = new XmlTextReader(fs))
        while (xrdr.Read()) {
            if(--safetyCheck == 0) throw new SomeTypeOfException();
            ... more code
        }
    ... more code
}

关于c# - 如何检测和避免无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8880004/

相关文章:

c# - 使用表达式在 EF4 中渴望加载多对多?

asp.net - 如何使用 ExcelLibrary dll 卡住 Excel 中的标题行

php - MySQL Left Join、Group By、Order By、Limit = 糟糕的性能

C优化技术

c# - SSH.NET C# 发送 Yes 或 No 到 linux 服务器

c# - 克服从 Winforms 迁移到 WPF 的更大障碍是什么?

c# - VSTS 版本 : roles keep recycling because they can't locate valid DLLs

c# - 计算给定日期和月份的下一个工作日期

带有 post 的 C# HTTPS 请求

performance - Mac OS X 中的每个进程磁盘读/写统计