Czy mogę uruchomić program, który intensywnie korzysta z wyjątków w debugerze i nie przechwytuje wyjątków w debugerze?Czy mogę uniknąć powolnych wyjątków .net w DEBUG z załączonym debuggerem?
W szczególności próbuję użyć analizatora składni skryptów TSQL i rozumiem, że it's use of ANTLR is slow in debug mode.
Nie jest to dziwne, jeśli spojrzeć na wyjście debugowania, znajdziesz że jest to spowodowane przez Microsoft® SQL Server® 2012 Transact-SQL ScriptDom parser, ponieważ opiera się na ramach antlr , to rozwija produkcje AST, korzystając z wyjątków, dlatego powoli uruchamia się wewnątrz debuggera.
I całkowicie zrozumieć, że .net wyjątki are slow when thrown
Jak mogę uniknąć powolność podczas pracy ze standardową konfiguracją Debug z debugerem?
- Wyłączyłem intelitrace.
- Nie zdefiniowałem stałej DEBUG.
- Wyłączyłem wiadomości wyjątków w menu Narzędzia> Opcje> Debugowanie> Okno wyników.
Co jeszcze mogę spróbować?
- Ustawienie CLR Mogę zmienić poprzez app.config?
- opcja zmiany w Visual Studio?
To jest kod, którego używam do parsowania.
TSqlParser parser = new TSql110Parser(false);
IList<ParseError> errors;
TSqlFragment fragment = parser.Parse(new StringReader(sqltext), out errors);
Po uruchomieniu za pomocą CTRL + F5 kończy się szybko, a przy użyciu F5 (dołączony debugger), rezygnuję z czekania.
można spróbować umieścić punkt przerwania, odłączeniu debugger, a następnie robi [ 'Debugger.Launch()'] (https://msdn.microsoft.com/en-us/library/system. diagnostics.debugger (v = vs.110) .aspx) po zakończeniu analizy. Jeśli to działa, opublikuję to jako odpowiedź. –
@ScottChamberlain jest sposobem obejścia tego kodu, który zgłasza wyjątki. Powinieneś przenieść pytanie do odpowiedzi, ponieważ jest to poprawne rozwiązanie, ale nie odpowiada, jeśli debugger ma ustawienie, które można zmienić, czy też nie. W tym przypadku wyłączam debuggera, aby obejść ten problem. – JJS