82595


C#で、以下のようなコードを使ってstringをfloatに変換しました。

[code]

    string testFloat = "1.0";
    float weight = float.Parse(testFloat);
    
[/code]

しかし、ユーザーの言語環境によって上記のコードではうまく変換できないことがあるようなので以下のように書き直しました。

[code]

    using System.Globalization;
    string testFloat = "1.0";
    float weight = float.Parse(testFloat, CultureInfo.InvariantCulture);
    
[/code]

言語環境の問題をクリアすると、処理速度が遅くなってしまったような気がしています。  
どんな言語環境でも問題なく動いて、より速い速度のstring→float変換方法はありますでしょうか？


CC BY-SA 4.0
2021-09-20T02:04:16.643
82593
2021-09-20T21:11:36.640
34471
question
c#
C#で文字列→Floatに変換する処理速度の速い方法を知りたい


気のせいでしょう。言語に依存しない処理になるため、むしろ速くなる可能性すらあります。気になるなら計測すべきです。また、この`float.Parse()`（`Single.Parse()`）がプログラム全体の何割を占めているかも計測すべきです。`Single.Parse()`が全体の1%程度しか占めていないのであれば、これをどれだけ速くしたとして全体としては微々たるものです。

コメントで言及されていますが、metropolisさんが計測してくださいました。速度差も示されていますが、何よりも`Single.Parse()`を100万回実行しても0.1秒にも満たないこと。例えば100桁×1万行のCSVファイルを解析する際なども`Single.Parse()`に要する時間は一瞬でしかないということです。

* * *

なお、[`Single.Parse()`](https://docs.microsoft.com/ja-
jp/dotnet/api/system.single.parse?view=net-5.0)には`NumberStyles`を引数に取るオーバーロードが用意されています。許容するスタイルを限定することで速くなる可能性はあります。

もし本当に`Single.Parse()`の実行時間が支配的で、高速化を望むのであれば、[csFastFloat](https://www.nuget.org/packages/csFastFloat)のような外部ライブラリの利用を検討してください。例えばこのライブラリは標準の`Single.Parse()`より７倍速くなるそうです。


CC BY-SA 4.0
2021-09-20T02:47:34.220
82595
2021-09-20T21:11:36.640
2021-09-20T21:11:36.640
4236
4236
82593
answer