Je viens de recevoir un code. Le code est écrit en C# et il insère des données en temps réel dans la base de données chaque seconde. Les données sont accumulées dans le temps ce qui rend les chiffres importants.Comment ce code peut-il être optimisé?
Les données sont mises à jour dans la seconde plusieurs fois puis à la fin du deuxième résultat est pris et inséré.
Nous avions l'habitude d'adresser les rangées de jeu de données directement dans la seconde à travers les propriétés. Par exemple beaucoup d'opérations comme celle-ci 'datavaluerow.meanvalue + = mean; pourrait avoir lieu. nous avons découvert que cela dégrade les performances après l'exécution du profileur car la fusion interne a été effectuée, donc nous avons créé un tableau de décimales 2d sur lequel les mises à jour sont effectuées, puis les valeurs sont assignées aux datarows seulement à la fin de la seconde. J'ai couru un profileur et j'ai découvert que cela prenait encore beaucoup de temps (bien que moins que le temps passé à accéder fréquemment aux datarows).
Le code qui est exectued à la fin de la seconde est la suivante
public void UpdateDataRows(int tick)
{
//ord
//_table1Values is of type decimal[][]
for (int i = 0; i < _table1Values.Length; i++)
{
_table1Values[i][(int)table1Enum.barDateTime] = tick;
table1Row[i].ItemArray = _table1Values[i].Cast<object>().ToArray();
}
// this process is done for other 10 tables
}
Est-il possible d'améliorer encore cette approche.
Où votre profilage montre-t-il le plus de temps passé? – Oded
Récupère la distribution (int) table1Enum.barDateTime hors de la boucle. –
@ Oded, la plupart du temps est consacré à l'opération de coulée – mustafabar