由于先前的函数评估超时,功能评估被禁用。

21

我有一个C#应用程序,正在遇到以下错误:

“由于之前的函数评估超时,功能评估已禁用。 您必须继续执行以重新启用函数评估。”

我在stackoverflow和msdn上看到了许多与此错误相关的帖子,但没有找到解决方案。 大多数人说,这个错误出现在多线程应用程序中,并且可以通过删除所有断点来解决。 在我的情况下,我的应用程序是单线程的,我也已经删除了所有断点,但当我调试应用程序时仍然会收到此错误。 当我不使用调试运行应用程序时,我的应用程序就会挂起,我必须通过Visual Studio停止它。 我尝试查找代码卡住的地方,我找到了它卡住的那一行代码。 这是代码片段:

MatchCollection matchesFound = Regex.Matches(content, 
                                             keywordPattern,
                                             RegexOptions.Multiline);
int matchCount = matchesFound.Count;
当代码执行到第二行时,即尝试获取Count属性值时,我的应用程序会卡住。 我的正则表达式没问题,因为我在Expresso中进行了测试,并且我确定在执行Matches()方法时应用程序没有卡住。 如果通过调试来到该行,我就会得到上述错误。 有人知道为什么会出现这个错误以及如何解决吗?
我正在使用Visual Studio 2005。

我的正则表达式是根据一个文件中提到的关键字动态生成的。我从文件中读取这些关键字并形成正则表达式。我已经在Expresso中测试了该正则表达式,并且它可以正常工作,而不会在Expresso中挂起。此外,在调试过程中,我发现我的应用程序在Matches()方法处没有挂起。 - Shekhar
1
我认为你应该发布一个正则表达式和测试字符串的示例 - 或者更好的是:整个代码的最小化编译运行和可重现版本。 - Amarghosh
1个回答

9
挂起的原因和错误信息可能是相同的:有些东西需要大量时间来计算。无论是在代码中还是在调试器中。调试器没有魔力可以比您的应用程序更快地计算某些内容。
您可以尝试使用Debug.WriteLine输出实际的contentkeywordPattern。我认为两者都足够大,需要花费很长时间才能进行处理。

嗯...好的...我说我的正则表达式没问题的原因是,Regex.Matches()方法执行时不会花费太多时间。只有当我尝试获取MatchCollection对象的count属性时,我的应用程序才会挂起。 无论如何,我会再次检查我的正则表达式,并在此处放置示例正则表达式。 感谢您的帮助!! - Shekhar
5
Regeex.Matches()几乎无作为。MatchCollection内容是惰性计算的。只有在第一次调用类似于Count的东西时,它才会找到所有匹配项。因此这里没有什么意外。我仍然认为content很大且keywordPattern很复杂。您可能需要重新考虑自己的逻辑。也许有一种更快速地计算出需要的结果的方法。实际上,“如何高效计算某些东西?”可能比“为什么我的程序运行得如此缓慢?”更好地解决问题。 - SergGr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接