2014-02-04 6 views
4

Я использую условную точку останова для определения того, когда переменная C#DateTime больше определенного времени. Эта точка останова будет проверена примерно в 50 000 раз.Решения или workaound для условного прерывания условного прерывания Visual Studio

моя условная точка останова выглядит следующим образом:

quote.Time > new DateTime(2014,2,4,3,59,0) 

Без этого условного перерыва указать мой тестовый прогон занимает около 15 секунд. С условной точкой останова требуется 45 минут.

Есть ли что-нибудь, что я могу сделать, чтобы помочь ускорить это, не изменяя код, который я отлаживаю, чтобы добавить утверждение или условное?

Есть ли способ, чтобы он вычислил переменную DateTime только один раз? Или это скорее архитектурная проблема с тем, как условные точки останова реализованы в среде IDE?

+2

Вы пытались создать экземпляр 'new DateTime (2014,2,4,3,59,0)' в переменной вне цикла и с условием использовать его? Это скажет вам, является ли задержка «новой датой» –

+0

. Она внутри цикла? Вы можете определить новое Datetime вне цикла, если оно относится к переменной. – Kuzgun

+0

@Adrian, здесь нет внутренней или узкой петли. Код вызывается для каждого события кавычек. Я могу сделать DateTime переменной-членом как одноразовый хак, но это, похоже, не приносит мне большой производительности. – chollida

ответ

1

Очевидно, что условные точки останова очень медленные - это известная проблема. См.: http://www.bing.com/search?setmkt=en-US&q=visual+studio+conditional+breakpoint+slow

Поскольку я знаю, сколько раз моя функция будет называться, детерминированное моделирование, я закончил использовать функцию точки останова визуальной студии Hit Count.

Это позволило мне не взломать код с помощью оператора if и повторить его, если изменилось мое условие перерыва.

2

Просто для целей отладки я бы сказал, создайте новый оператор if и фиктивную переменную (например, int i = 0;) и установите точку останова на этой строке. Затем просто входите в/шаг через остальную часть кода. Просто для тестирования вы всегда можете просто удалить эти 1-2 строки кода после тестирования.

заявление, если-The (логически), содержащий: if (quote.Time > new DateTime(2014,2,4,3,59,0)) { int i=0; }

8

почему вы не прекращаете использовать условную точку останова и изменения кода, пока не отлажена его. поэтому код станет примерно таким:

int dummyx = 0; 
if (quote.Time > new DateTime (2014,2,4,3,59,0) 
{ 

dummyx++; // put normal break point here! 

} 

Это будет работать намного быстрее.

+2

уверен, могу. Я просто подумал, что стоит спросить, есть ли лучший способ, прежде чем я взломаю код. – chollida

Смежные вопросы