accès Array ne tarde pas, j'essayé ce programme comparant le temps de sommation d'une série de chiffres récurrents consécutifs de 0 à 255, soit directement, ou en les mettant dans un réseau en dents de scie ou d'une matrice:
const int N = 10000;
var jagged = new byte[ N ][];
var matrix = new byte[ N, N ];
var count = (byte)0;
for (var i=0; i< N; i++)
{
jagged[ i ] = new byte[ N ];
for (var j = 0; j < N; j++)
{
jagged[ i ][ j ] = count;
matrix[ i, j ] = count;
count = count == 255 ?
(byte) 0 :
(byte) (count + 1);
}
}
var watch = new Stopwatch();
watch.Start();
var total = 0;
for (var i = 0; i < N; i++)
{
for (var j = 0; j < N; j++)
{
total += jagged[ i ][ j ];
}
}
watch.Stop();
Console.WriteLine("Total with jagged array: {0} in {1} ms", total, watch.ElapsedMilliseconds);
watch.Restart();
total = 0;
count = (byte)0;
for (var i = 0; i < N; i++)
{
for (var j = 0; j < N; j++)
{
total += matrix[ i, j ];
}
}
watch.Stop();
Console.WriteLine("Total with matrix: {0} in {1} ms", total, watch.ElapsedMilliseconds);
watch.Restart();
total = 0;
count = (byte)0;
for (var i = 0; i < N; i++)
{
for (var j = 0; j < N; j++)
{
total += count;
count = count == 255 ?
(byte)0 :
(byte)(count + 1);
}
}
watch.Stop();
Console.WriteLine("Total without array: {0} in {1} ms", total, watch.ElapsedMilliseconds);
et les résultats sont 497 ms en utilisant le tableau dentelé, 624 ms en utilisant une matrice et 486 ms en calculant les nombres directement.
J'ai essayé d'utiliser la liste, mais le problème persiste ici. C'est TRES lent. La liste sera meilleure pour moi, mais je ne comprends pas comment je peux obtenir un pointeur dans mon cas –
1. Ceci est un tableau dentelé (tableau de tableaux) et non un tableau bidimensionnel ('byte [,]'). 2. Vous n'avez pas besoin de deviner. Utilisez profiler pour trouver le goulot d'étranglement. – Dmitry
Dmitry, désolé, c'est déchiqueté. Mais les problèmes sont toujours là - lorsque je supprime l'accès par index, la vitesse augmente considérablement. –