Apakah ada perbedaan kinerja yang mencolok antara penggunaan interpolasi string:
myString += $"{x:x2}";
vs String.Format ()?
myString += String.Format("{0:x2}", x);
Saya hanya bertanya karena Resharper meminta perbaikan, dan saya telah dibodohi sebelumnya.
Jawaban:
Yang penting adalah relatif. Namun: interpolasi string diubah menjadi
string.Format()
pada waktu kompilasi sehingga mereka akan mendapatkan hasil yang sama.Ada perbedaan halus: seperti yang bisa kita katakan dari pertanyaan ini , penggabungan string dalam format specifier menghasilkan
string.Concat()
panggilan tambahan .sumber
int
digunakan).var a = "hello"; var b = $"{a} world";
mengkompilasi ke rangkaian string.var a = "hello"; var b = $"{a} world {1}";
dikompilasi ke format string.interpolasi string diubah menjadi string.Format () pada saat kompilasi.
Juga dalam string. Format Anda dapat menentukan beberapa keluaran untuk satu argumen, dan format keluaran yang berbeda untuk satu argumen. Tapi interpolasi string lebih mudah dibaca, saya kira. Jadi terserah kamu.
Ada beberapa hasil uji kinerja https://koukia.ca/string-interpolation-vs-string-format-string-concat-and-string-builder-performance-benchmarks-c1dad38032a
sumber
String::Format
. dan terkadang menjadiString::Concat
. Dan pengujian performa pada halaman itu tidak terlalu berarti: jumlah argumen yang Anda berikan ke masing-masing metode tersebut bergantung. concat tidak selalu yang tercepat, pembuat string tidak selalu yang paling lambat.Pertanyaannya adalah tentang kinerja, namun judulnya hanya mengatakan "vs", jadi saya merasa harus menambahkan beberapa poin lagi, beberapa di antaranya bersifat opini.
Lokalisasi
string.Format
. Namun, ada alat untuk itu (misalnyaReSharper
).Maintainability (pendapat saya)
string.Format
jauh lebih mudah dibaca, karena berfokus pada kalimat yang ingin saya ucapkan, misalnya saat membuat pesan kesalahan yang bagus dan bermakna. Menggunakan{N}
placeholder memberi saya lebih banyak fleksibilitas dan lebih mudah untuk memodifikasinya nanti.string.Format
jauh lebih tidak rentan terhadap hal ini.Jadi berdasarkan ini saya memutuskan untuk tetap menggunakan
string.Format
di sebagian besar kode saya. Namun, saya telah menyiapkan metode ekstensi untuk mendapatkan cara pengkodean yang lebih lancar yang lebih saya sukai. Implementasi ekstensi adalah satu baris, dan terlihat seperti ini sedang digunakan.Interpolasi adalah fitur hebat, jangan salah paham. Tapi IMO itu bersinar yang terbaik dalam bahasa-bahasa yang kehilangan
string.Format
fitur -like, misalnya JavaScript.sumber
{3}
X atau Y terutama jika Anda mulai mengatur ulang format Anda. Contoh Madlibs:$"It was a {adjective} day in {month} when I {didSomething}"
vsstring.Format("It was a {0} day in {1} when I {2}", adjective, month, didSomething)
->$"I {didSomething} on a {adjective} {month} day"
vsstring.Format("I {2} on a {0} {1} day", adjective, month, didSomething)
string.Format
saya pikir Anda jauh lebih rentan terhadap masalah ini. Tapi bagaimanapun, inilah mengapa saya menekankan bahwa ini adalah pendapat saya :)