C# Décimal de type de données de performance

Je suis en train d'écrire une application financière en C# où la performance (vitesse) est critique. Parce que c'est un financière de l'app que j'utilise le type de données Décimal de manière intensive.

J'ai optimisé le code autant que j'ai pu avec l'aide d'un profileur. Avant d'utiliser la Virgule, tout a été fait avec le Double de type de données et la vitesse a été plusieurs fois plus rapide. Toutefois, le Double n'est pas une option en raison de sa nature binaire, causant beaucoup de précision les erreurs au cours de plusieurs opérations.

Est-il décimal de la bibliothèque que je peux l'interface avec le C# qui pourrait me donner une amélioration des performances sur le natif de Décimal de type de données dans .NET?

Sur la base des réponses que j'ai déjà eu, j'ai remarqué que je n'était pas assez clair, alors voici quelques détails supplémentaires:

  • L'app doit être aussi rapide comme il peut éventuellement aller (c'est à dire aussi vite qu'il était lors de l'utilisation de la Double à la place de la Virgule serait un rêve). Double était d'environ 15x plus rapide que la Virgule, que les opérations sont basées sur matériel.
  • Le matériel est déjà top-notch (je suis en cours d'exécution sur un Double Xénon Quad-Core) et l'application utilise des threads, de sorte que l'utilisation CPU est toujours à 100% sur la machine. En outre, l'application est en cours d'exécution, en 64 bits mode, ce qui lui donne un avantage de performance mesurables sur 32 bits.
  • J'ai optimisé au-delà de la santé mentale (plus d'un mois et demi de l'optimisation, ne le croyez ou pas, il faut maintenant env. 1 /5000e, de ce qu'il a fallu faire les mêmes calculs que j'ai utilisé comme référence initialement); cette optimisation impliqués tout: chaîne de traitement, I/O, l'accès base de données et d'index, de mémoire, de boucles, de changer la façon dont certaines choses ont été faites, et même à l'aide de "passer" au dessus de "si" partout où il fait une différence. Le profiler est maintenant montrant clairement que le solde de la performance coupable, c'est sur le type de données Décimal opérateurs. Rien d'autre n'est l'ajout d'une quantité considérable de temps.
  • Vous devez me croire ici: je suis allé aussi loin que je pouvais peut-être faire dans le domaine de la C#.NET pour optimiser l'application, et je suis vraiment étonné de ses performances actuelles. Je suis maintenant à la recherche d'une bonne idée pour améliorer la Virgule performance à quelque chose près du Double. Je sais que c'est seulement un rêve, mais je voulais juste vérifier que je pensais de tout ce qui est possible. 🙂

Merci!

  • Vous êtes sur le point de l'optimisation prématurée, juste le code de l'application correctement, puis ajuster après le fait
  • Vous avez fait tout le faible niveau C# optimisations. Il peut y avoir quelques améliorations algorithmiques gauche (par exemple, en faisant moins d'opérations sur les nombres décimaux).
  • Opérations de base de données dans un temps sensible application Financière sonne mal...
InformationsquelleAutor tempw | 2008-12-14