2010-04-27 36 views
19

我有一个C#应用程序中,我得到这个错误:功能评价禁用的,因为以前的功能评价超时

“功能评估禁用的,因为以前的功能评价超时,你必须继续执行,以重新启用功能。评价“。

我在stackoverflow和msdn上看到了很多与此错误有关的帖子,但没有找到解决方案。大多数人都说这个错误出现在多线程应用程序中,可以通过删除所有断点来解决。 在我的情况,我的应用程序是单线程的,我也删除了所有的断点,但仍然在调试应用程序时出现此错误。 当我运行该应用程序。没有调试,我的应用程序只是挂起,我不得不通过视觉工作室来阻止它。 我试图找到它挂起的代码,我发现它挂起的那一行。以下是代码片段:

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

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

我使用Visual Studio 2005

+1

什么是正则表达式? – 2010-04-27 12:30:47

+0

我的正则表达式基于一个文件中提到的关键字是动态的。我从文件中读取这些关键字并形成正则表达式。我已经在Expresso中测试了这个正则表达式,它在没有在expresso中挂起的情况下运行正常。另外,在调试时,我发现我的应用程序。不会在Matches()方法中挂起。 – Shekhar 2010-04-27 12:34:04

+1

我认为你应该发布一个示例正则表达式和测试字符串 - 或者甚至更好:一个最小化的编译运行n可重现版本的整个代码。 – Amarghosh 2010-04-27 12:49:05

回答

8

挂起的,但此错误消息的原因可能是相同:有一些东西需要大量的时间来计算。当你在代码和调试器中执行它时。调试器没有什么魔力来计算比你的应用程序更快的东西。

您可以尝试使用Debug.WriteLine来输出实际的contentkeywordPattern。我认为很可能两个人都足够大,需要很长时间才能继续下去。

+0

hmm ..好吧..我说我的正则表达式很好的原因是,Regex.Matches()方法执行时没有花费太多时间。我的应用程序只在我尝试获取MatchCollection对象的count属性时挂起。 无论如何,我将再次重新检查我的正则表达式,并且还会在此处放置示例正则表达式。 感谢您的帮助! – Shekhar 2010-04-29 05:23:20

+5

'Regeex.Matches()'几乎没有。 MatchCollection内容是** lazy **计算的。这是第一次打电话给'Count',这使得它找到所有匹配。所以这里没有什么惊喜。我仍然认为'content'很大,'keywordPattern'很复杂。你可能不得不重新思考你的逻辑。也许有一种方法可以更快地计算出你所需要的。实际上“如何有效地计算某些东西”可能比“为什么我的程序运行速度如此之慢”更适合问这里的问题。 – SergGr 2010-04-29 10:03:14