Я работаю над приложением Windows форм, которое содержит CheckListBox. У меня также есть что-то вроде следующего фрагмента кода в моем приложении (который выполняется каждые 25 миллисекунд событием «отметка таймера» Windows Forms):
public Stopwatch watch = System.Diagnostics.Stopwatch.StartNew(); //global variable
someMethod()
{
watch.Restart();
if (checkedListBox1.GetItemChecked(0)) //executes wether the first item of the checkedListBox1 is checked
{
if (something1) {
doSomething1();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
else {
if (something2) {
doSomething2();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
else {
doSomething3();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
}
}
else //executes if not checked
{
if (something3) {
doSomething4();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
else {
doSomething5();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
}
}
При выполнении кода, когда это так требуется около 1-3 миллисекунд для достижения whatch.Stop()
внутри скобок, содержащих doSomething4()
или doSomething5()
. Тем не менее, когда я выполняю что-то вроде этого:
public Stopwatch watch = System.Diagnostics.Stopwatch.StartNew(); //global variable
someMethod()
{
watch.Restart();
/*if(checkedListBox1.GetItemChecked(0))
{
if (something1)
{
doSomething1();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
else
{
if (something2)
{
doSomething2();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
else
{
doSomething3();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
}
} */ //when everything above and the first "if-else" pair are commented
// else
// {
if (something3)
{
doSomething4();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
else
{
doSomething5();
watch.Stop();
double elapsedSeconds = watch2.Elapsed.TotalSeconds;
}
// }
}
... то есть, без учета самого внешнего, если и еще, это занимает примерно от 0,2 до 0,4 миллисекунды! (Важное примечание: элемент внутри checkedListBox всегда не отмечен, и я вставляю точку останова, чтобы проверить прошедшие секунды в «случайное время» во время выполнения кода - вместо того, чтобы начинать выполнение с уже вставленной точкой останова. Я отладил оба кода уже много раз ...).
Я знаю, что есть много кода до достижения doSomething4()
или doSomething5()
в незакомментированном коде, но факт в том, что, логически, НИЧЕГО выполняется внутри if(checkedListBox1.GetItemChecked(0))
(поскольку флажок всегда снят).
Почему «простая» проверка if () может «испортить» выполнение времени и повысить его почти в 10 раз по сравнению с первоначальным значением ? (Я знаю, что так не должно быть, потому что внутри doSomething4()
и doSomething5()
есть множество операторов if и else, и они сами по себе не увеличивают количество таймеров так сильно ...)
РЕДАКТИРОВАТЬ (май / 03/2020):
Итак, я обнаружил, что, по-видимому (как вы можете видеть в комментариях ниже), то, что вызывает это повышение времени выполнения, является моим заявлением получая доступ к его элементу CheckListBox и возвращая мне текущее логическое значение.
Это мое приложение должно выполняться максимально быстро ... будет ли способ сократить это истекшее время при сохранении значения checkedListBox1().GetItemChecked()
?