У меня есть цикл for, который слишком длинный, и я не знаю почему.проблемы с диагностированием времени, проведенного в цикле for C#
Stopwatch proctime = new Stopwatch();
Stopwatch innerlooptime = new Stopwatch();
Stopwatch outerlooptime = new Stopwatch();
proctime.Start();
int length = inbtable.Rows.Count;
outerlooptime.Start();
for (int i = 0; i < length; i++)
{
outerlooptime.Stop();
DataRow newrow = graphdata.NewRow();
innerlooptime.Start();
for (int j = 0; j < graphdata.Columns.Count; j++)
{
colname = graphdata.Columns[j].ColumnName;
newrow[j] = inbtable.Rows[i][colname];
}
innerlooptime.Stop();
outerlooptime.Start();
graphdata.Rows.Add(newrow);
}
proctime.Stop();
если вы время все это, время, затраченное на просто «внутренний цикл» или J-петли как 1/10 секунды.
Время, проведенное внутри цикла i, но не j-loop, равно 1/10 секунды.
Время, затраченное на общий цикл, составляет около 1 секунды. поэтому Time-iloop + Time-jloop - это 1/5-е из общего времени. где остальное время тратится? взгляните на изображение, сравнивая время обработки (proctime в коде), время наружного времени и время внутренней паузы. почему они не подходят к чему-то гораздо ближе друг к другу?
вы начинаете наружное закрытие за пределами первого цикла, но останавливаете его, как только начинается цикл? –
Если вы используете визуальную студию, попробуйте запустить профилировщик производительности с включенными символами Microsoft (параметры -> отладка -> символы). «Горячий путь», созданный профилем cpu, должен указывать, какие вызовы занимают больше всего времени. –
Джеймс, это похоже на то, что мне нужно. Благодаря! Я собираюсь попробовать его прямо сейчас – metinoheat