J'ai une boucle for qui prend beaucoup trop de temps et je ne sais pas pourquoi.problèmes de diagnostic du temps passé dans une boucle 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();
si vous le temps tout dehors, le temps passé sur juste la « boucle interne » ou la j-boucle est comme 1/10e de seconde.
le temps passé à l'intérieur de la boucle i, mais pas la boucle j est comme 1/10ème de seconde.
le temps passé sur la boucle totale est d'environ 1 seconde. donc Time-iloop + Time-jloop est comme 1/5ème du temps total. Où est passé le reste du temps? jetez un oeil à l'image, en comparant le temps de traitement (proctime dans le code), le temps de boucle externe et le temps de boucle interne. pourquoi ne pas ajouter à quelque chose de plus proche les uns des autres?
vous commencez externallooptime en dehors de la première boucle, mais l'arrêter dès que la boucle commence? –
Si vous utilisez Visual Studio, essayez d'exécuter le profileur de performances avec les symboles Microsoft activés (options -> débogage -> symboles). Le "hotpath" produit par un profil cpu devrait indiquer quels appels prennent le plus de temps. –
James, ça ressemble exactement à ce dont j'ai besoin. Merci! Je vais essayer maintenant – metinoheat