En arrière-plan, j'essaie de faire une simulation de bâtiment à grande échelle.Multiplication de liste rapide en C#
Le problème est que j'ai une liste du type personnalisé Point3D
que je veux faire une multiplication de tableau rapide sur elle. Donc, à un pas de temps différent, je devrais avoir une valeur double
avec le Point3D
(j'ai surchargé l'opération de multiplication et de division de Point3D
) pour chaque Point3D
, le résultat sera alors stocké dans un Dictionary<double,List<Point3D>>
. La clé de ce dictionnaire est le pas de temps différent, et la valeur est le déplacement correspondant.
Depuis que j'ai beaucoup de DOF, et beaucoup de pas de temps, il semble que l'opération ci-dessus est très lente. Y a-t-il moyen d'optimiser l'ensemble de l'opération?
Ceci est mon code actuel, et il est extrêmement lent. J'ai donc besoin d'idées pour l'optimiser.
public static Dictionary<double, List<Point3D>> ComputeTimeSeries(Dictionary<double, double> timeStep, List<Point3D> dofs)
{
var timeSeries = new Dictionary<double, List<Point3D>>();
foreach(var keyValue in timeStep)
{
// the point3d*double operation is already being overloaded.
timeSeries.Add(keyValue.Key, dofs.Select(pt=>pt*keyValue.Value).ToList());
}
return timeSeries;
}
Remarque: Je suis toujours bloqué sur .Net 3.5. Donc, probablement PLINQ et TPL ne va pas aider
Quelle est exactement la valeur du pas de temps? Est-ce une forme de temps d'échantillonnage? L'intervalle entre les timesteps est-il différent? Je me demandais juste si l'utilisation d'un type de dictionnaire est un must? – ChrisBD
La valeur de temps est une forme de temps échantillonné, avec une augmentation régulière entre les valeurs. L'intervalle entre les timesteps est le même. Et non, l'utilisation du dictionnaire n'est pas nécessaire. Mais l'utilisation du dictionnaire est-elle un problème? – Graviton
Si vous n'avez pas besoin d'un accès rapide par clé, alors bien sûr Array ou simple liste sera préférable. –