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)
提前致谢
那么,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)