2010-04-27 15 views
19

Ho un'applicazione C# in cui sto ottenendo questo errore:valutazione Funzione disabilitata a causa di una precedente valutazione della funzione scaduta

"valutazione Funzione disabilitata a causa di una precedente valutazione della funzione scaduta, è necessario continuare l'esecuzione di funzione di riattivare. valutazione."

Ho visto molti post relativi a questo errore su stackoverflow e su msdn ma non ho trovato alcuna soluzione. La maggior parte delle persone afferma che questo errore si presenta in un'applicazione multithread e può essere risolto eliminando tutti i breakpoint. Nel mio caso, la mia app è a thread singolo e ho eliminato anche tutti i punti di interruzione, ma continuo a ricevere questo errore quando eseguo il debug dell'applicazione. Quando eseguo l'app. senza eseguire il debug, la mia applicazione si blocca e devo smettere di farlo attraverso lo studio visivo. Ho provato a trovare il codice dove si è bloccato e ho trovato la linea dove si blocca. Ecco il frammento di codice:

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

Quando l'esecuzione avviene in seconda linea, vale a dire quando il codice cerca di ottenere il valore della proprietà Count mia applicazione ottiene appendere. La mia espressione regolare va bene così come l'ho testata su Expresso e sono sicuro che l'applicazione non verrà impiccata durante l'esecuzione del metodo Matches(). Se arrivo a quella riga con il debug, ottengo l'errore sopra menzionato. Qualcuno sa perché questo errore viene e come risolverlo?

Sto usando Visual Studio 2005.

+1

Qual è la regex? –

+0

La mia espressione regolare è dinamica in base alle parole chiave menzionate in un file. Ho letto quelle parole chiave da file e form regex. Ho provato la regex in Expresso e ha funzionato bene senza essere impiccato in expresso. Inoltre, durante il debug ho trovato che la mia app. non si blocca al metodo Matches(). – Shekhar

+1

Penso che dovresti pubblicare un regex di esempio e la stringa di test - o anche meglio: una versione minimizzata compilabile-n-run-n-riproducibile dell'intero codice. – Amarghosh

risposta

8

Le ragioni del blocco e di questo messaggio di errore sono probabilmente stesso: c'è qualcosa che prende un sacco di tempo per calcolare. Sia quando lo fai nel codice e nel debugger. Il debugger non ha il potere magico di calcolare qualcosa più veloce della tua app.

È possibile provare a utilizzare Debug.WriteLine per l'output effettivo content e keywordPattern. Penso che sia facile che entrambi siano abbastanza grandi da richiedere anni per procedere.

+0

hmm .. ok .. La ragione per cui ho detto che il mio regex va bene è che, il metodo Regex.Matches() viene eseguito senza prendere troppo tempo. la mia app. si blocca solo quando provo ad ottenere la proprietà count dell'oggetto MatchCollection. Ad ogni modo, ricontrollerò ancora una volta la mia regex e inserirò qui anche regex di esempio. Grazie per l'aiuto !! – Shekhar

+5

'Regeex.Matches()' non fa quasi nulla. Il contenuto di 'MatchCollection' è ** pigro ** calcolato. È la prima chiamata a qualcosa come "Count" che fa trovare tutte le partite. Quindi non ci sono sorprese qui. Continuo a pensare che 'content' sia grande e' keywordPattern' sia complicato. Potrebbe essere necessario ripensare la tua logica. Forse c'è un modo per calcolare ciò che ti serve in un modo molto più veloce. In realtà "Come calcolare qualcosa in modo efficiente?" Potrebbe essere una domanda migliore da chiedere qui di "Perché il mio programma funziona così lentamente?". – SergGr

Problemi correlati