2010-04-27 66 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