Я пишу финансовое приложение на С#, где критическая производительность (то есть скорость). Поскольку это финансовое приложение, я должен интенсивно использовать десятичный тип данных.
Я оптимизировал код настолько, насколько мог, с помощью профилировщика. Прежде чем использовать Decimal, все было сделано с двойным типом данных, и скорость была в несколько раз быстрее. Однако Double не является вариантом из-за его двоичного характера, вызывая много ошибок точности в течение нескольких операций.
Есть ли какая-нибудь десятичная библиотека, с которой я могу взаимодействовать с С#, которая может дать мне улучшение производительности над родным типом данных Decimal в .NET?
Основываясь на ответах, которые я уже получил, я заметил, что я недостаточно ясен, поэтому вот несколько дополнительных деталей:
- Приложение должно быть таким же быстрым, как и возможно (то есть, как быстро, когда использование Double вместо Decimal будет мечтой). Двойной был примерно в 15 раз быстрее, чем десятичный, поскольку операции основаны на оборудовании.
- Аппаратное обеспечение уже является первоклассным (я работаю на двухъядерном процессоре Dual Xenon), и приложение использует потоки, поэтому загрузка процессора всегда на 100%. Кроме того, приложение работает в 64-битном режиме, что дает ему надежное преимущество в производительности более 32 бит.
- Я оптимизировал прошлое с точки зрения здравомыслия (более полутора месяцев, оптимизируя, верьте или нет, теперь требуется около 1/5000 того, что требуется для выполнения тех же вычислений, которые я использовал в качестве ссылки изначально ); эта оптимизация включала в себя все: строчную обработку, ввод-вывод, доступ к базе данных и индексы, память, циклы, изменение способа создания некоторых вещей и даже использование "переключателя" над "если" везде, где это имело значение. Профилировщик теперь ясно показывает, что оставшийся виновник производительности относится к операторам десятичного типа данных. Ничто другое не добавляет значительного количества времени.
- Вы должны поверить мне здесь: я дошел до того, что смог продвинуться в области С#.NET для оптимизации приложения, и я действительно поражен его текущей производительностью. Теперь я ищу хорошую идею, чтобы улучшить десятичную производительность до уровня, близкого к Double. Я знаю это только сон, но просто хотел проверить, что я думал обо всем, что возможно.:)
Спасибо!