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

Any*_*are 7 c# linq asp.net performance 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"));
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

Mar*_*ell 6

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

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
}
Run Code Online (Sandbox Code Playgroud)