函数评估被禁用,因为之前的函数评估超时

Posted

技术标签:

【中文标题】函数评估被禁用,因为之前的函数评估超时【英文标题】:Function evaluation disabled because a previous function evaluation timed out 【发布时间】:2010-04-27 12:28:22 【问题描述】:

我有一个 C# 应用程序,其中出现此错误:

“。您必须继续执行才能重新启用函数评估。”

我在 *** 和 msdn 上也看到了许多与此错误相关的帖子,但没有找到解决方案。大多数人说这个错误来自多线程应用程序,可以通过删除所有断点来解决。 就我而言,我的应用程序是单线程的,我也删除了所有断点,但在调试应用程序时仍然出现此错误。 当我运行应用程序时。没有调试,我的应用程序就会挂起,我必须通过 Visual Studio 停止它。 我试图找到它挂起的代码,我找到了它挂起的那一行。这是代码 sn-p :

MatchCollection matchesFound = Regex.Matches(content, 
                                             keywordPattern,
                                             RegexOptions.Multiline);
int matchCount = matchesFound.Count;

当执行在第二行时,即当代码试图获取 Count 属性的值时,我的应用程序会挂起。我的正则表达式很好,因为我在 Expresso 中对其进行了测试,并且我确信应用程序在执行 Matches() 方法时不会被挂起。 如果我通过调试来到该行,我会收到上述错误。 有谁知道为什么会出现这个错误以及如何解决它?

我正在使用 Visual Studio 2005。

【问题讨论】:

我的正则表达式是动态的,基于一个文件中提到的关键字。我从文件中读取这些关键字并形成正则表达式。我已经在 Expresso 中测试了该正则表达式,它运行良好,而不会在 expresso 中挂起。另外,在调试时我发现我的应用程序。不会在 Matches() 方法处挂起。 我认为您应该发布一个示例正则表达式和测试字符串 - 甚至更好:整个代码的最小化 compile-n-run-n-reproducible 版本。 【参考方案1】:

挂起的原因和此错误消息的原因可能相同:有些东西需要花费大量时间来计算。无论是在代码中还是在调试器中。调试器没有比您的应用程序更快地计算某些东西的魔力。

您可以尝试使用Debug.WriteLine 来输出实际的contentkeywordPattern。我认为很容易两者都足够大,需要很长时间才能进行。

【讨论】:

hmm.. 好的.. 我说我的正则表达式很好的原因是,Regex.Matches() 方法执行时不会花费太多时间。我的应用程序。仅当我尝试获取 MatchCollection 对象的 count 属性时才挂起。无论如何,我将再次检查我的正则表达式,并将示例正则表达式放在这里。感谢您的帮助!! Regeex.Matches() 几乎什么都不做。 MatchCollection 内容是惰性计算的。首先调用Count 之类的东西,使其找到所有匹配项。所以这里没有惊喜。我仍然认为content 很大,keywordPattern 很复杂。你可能不得不重新考虑你的逻辑。也许有一种方法可以更快地计算出你需要的东西。实际上,“如何有效地计算?”在这里问的问题可能比“为什么我的程序运行这么慢?”更好。

以上是关于函数评估被禁用,因为之前的函数评估超时的主要内容,如果未能解决你的问题,请参考以下文章

Scala如何使用akka actor有效地处理超时操作

如何在while循环中评估函数

在C中调用函数之前的参数评估顺序[重复]

Go——处理用户连接超时

VB.NET - 传递要在函数中使用的表达式

pseq可以用seq来定义吗?