文字列補間の使用には顕著なパフォーマンスの違いがありますか?
myString += $"{x:x2}";
vs String.Format()?
myString += String.Format("{0:x2}", x);
Resharperが修正を促しているため、私は質問しているだけで、以前はだまされていました。
文字列補間の使用には顕著なパフォーマンスの違いがありますか?
myString += $"{x:x2}";
vs String.Format()?
myString += String.Format("{0:x2}", x);
Resharperが修正を促しているため、私は質問しているだけで、以前はだまされていました。
回答:
注目すべきは相対的です。ただし、文字列補間はstring.Format()
コンパイル時に変換されるため、結果は同じになります。
ただし、微妙な違いがあります。この質問からわかるように、書式指定子での文字列連結は追加のstring.Concat()
呼び出しになります。
int
が使用されている場合)、文字列連結にコンパイルされる可能性があります。 var a = "hello"; var b = $"{a} world";
文字列連結にコンパイルします。var a = "hello"; var b = $"{a} world {1}";
文字列形式にコンパイルします。
文字列補間はコンパイル時にstring.Format()に変換されます。
また、string.Formatでは、単一の引数に複数の出力を指定し、単一の引数に異なる出力形式を指定できます。しかし、文字列補間はもっと読みやすいと思います。だから、それはあなた次第です。
a = string.Format("Due date is {0:M/d/yy} at {0:h:mm}", someComplexObject.someObject.someProperty);
b = $"Due date is {someComplexObject.someObject.someProperty:M/d/yy} at {someComplexObject.someObject.someProperty:h:mm}";
いくつかのパフォーマンステスト結果がありますhttps://koukia.ca/string-interpolation-vs-string-format-string-concat-and-string-builder-performance-benchmarks-c1dad38032a
String::Format
ます。そして時にはString::Concat
。そして、そのページのパフォーマンステストはあまり意味がありません。これらの各メソッドに渡す引数の量は依存しています。concatは常に最速であるとは限らず、stringbuilderが常に最低速であるとは限りません。
問題はパフォーマンスに関するものでしたが、タイトルは「vs」とだけ書かれているので、もう少しポイントを追加する必要があるように感じます。
ローカリゼーション
string.Format
ます。ただし、そのためのツールがあります(例:)ReSharper
。保守性(私の意見)
string.Format
たとえば、わかりやすく意味のあるエラーメッセージを作成する場合など、私が言いたい文に焦点を当てているため、はるかに読みやすくなっています。{N}
プレースホルダーを使用すると柔軟性が増し、後で簡単に変更できます。string.Format
この傾向ははるかに少ないです。したがって、これらに基づいてstring.Format
、ほとんどのコードを使用することにしました。しかし、私はもっと流暢なコーディング方法を持つ拡張メソッドを用意しました。拡張機能の実装はワンライナーであり、使用中はこのように見えます。
var myErrorMessage = "Value must be less than {0:0.00} for field {1}".FormatWith(maximum, fieldName);
補間は素晴らしい機能です。誤解しないでください。しかし、IMO string.Format
は、JavaScriptのような-のような機能を見逃している言語で最高に輝きます。
{3}
。Madlibs例:$"It was a {adjective} day in {month} when I {didSomething}"
VS string.Format("It was a {0} day in {1} when I {2}", adjective, month, didSomething)
- > $"I {didSomething} on a {adjective} {month} day"
対string.Format("I {2} on a {0} {1} day", adjective, month, didSomething)
string.Format
私はあなたがこの問題を起こしにくいと思います。私はそれが私の意見だと強調した理由しかし、いずれにせよ、これは:)