私はList<string>
に二重の配列に変換するには、次の方法があります:C#持つDouble.toString()パフォーマンス上の問題
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;
}
)をループ内で最速の方法のように思える私に従っベンチマークはさまざまなLINQとConvertのすべての技を打ち破っています。
これはです。実際はです。 100万コール(すべてのCPU、64ビットを好む)に対して2400ms。だから私はそれをもっと速くするための様々な方法を試していました。明らかに私がソースやdestリストなどをキャッシュできないと仮定しましょう。
とにかく私はここで奇妙なものを見つけました... lst.Add()行をdouble型ではなく小数型にキャストするように変更すると、はるかに高速です。 900ms対2400ms。
はここ
1)小数点は、ダブル、その後、より高い精度を持っている私の質問ですので、私は正しいタイプキャストでは何も、失うべきではないのですか?
2)なぜDecimal.ToString()はDouble.ToString()よりもずっと速いのですか?
3)これは合理的な最適化ですか、これが私をかまえるために戻ってくる重要な詳細が欠けていますか?
私はもう少しメモリを使い切ることに心配していません。私はパフォーマンスだけを心配しています。
だけ使用して、この時点でのテストデータのための洗練された何も、:
s.A24 = new double[] { 1.2, 3.4, 5.6 };
あなたは[mcve]を投稿できますか?ところで、dd.Lengthを使うことができるときにLinQを使って 'dd.Count()'を呼び出す必要はありません。 – nvoigt
'lst.AddRange(dd.Select(x => x.ToString()));'これより高速ですか? –
値は何か、それらから必要とされる精度はどれくらいあり、どの形式が必要ですか? (私は途中で同じ振る舞いを見ています...) –