У меня есть следующий метод для преобразования двойного массива в List<string>
:
static Dest Test(Source s)
{
Dest d = new Dest();
if (s.A24 != null)
{
double[] dd = s.A24;
int cnt = dd.Length;
List<string> lst = new List<string>();
for (int i = 0; i < cnt; i++)
lst.Add(((double)dd[i]).ToString());
d.A24 = lst;
}
else
{
d.A24 = null;
}
return d;
}
Выполнение List.Add() в цикле кажется самым быстрым способом в соответствии с моими критериями, избивающими все различные LINQ и Convert трюки.
Это очень медленно. 2400 мс для миллиона вызовов (любой процессор, предпочитающий 64-разрядный). Поэтому я экспериментировал с различными способами, чтобы сделать это быстрее. Предположим, что я не могу кэшировать исходные или списки исключений и т.д., Очевидно.
Так или иначе, я наткнулся на что-то странное здесь... если я изменил строку lst.Add(), чтобы отличить десятичную, а не двойную, это намного, МНОГО быстрее. 900мс против 2400 мс.
Здесь мои вопросы
1) десятичная имеет большую точность, а затем двойную, поэтому я не должен ничего потерять в типе cast, правильно?
2) почему Decimal.ToString() намного быстрее, чем Double.ToString()?
3), это разумная оптимизация, или я пропустил некоторые ключевые детали, где это вернется, чтобы укусить меня?
Я не беспокоюсь о том, чтобы использовать немного больше памяти, меня беспокоит только производительность.
Ничего сложного для тестовых данных на данный момент, просто используя:
s.A24 = new double[] { 1.2, 3.4, 5.6 };