Terlepas dari semantiknya, kinerja mungkin menjadi pertimbangan penting saat Anda mempertimbangkan kedua opsi tersebut. Seperti yang disebutkan sebelumnya, KeyValuePairadalah tipe nilai (struct), sedangkan Tuple<>adalah tipe referensi (kelas). Oleh karena itu, the KeyValuePairdialokasikan di stack dan Tuple<>dialokasikan di heap, dan pilihan optimal biasanya ditentukan oleh argumen klasik Stack vs. Heap Memory Allocation . Singkatnya, ruang tumpukan terbatas, tetapi umumnya memiliki akses yang sangat cepat. Memori heap jauh lebih besar tetapi agak lebih lambat.
KeyValuePair<T1, T2>mungkin menjadi pilihan yang lebih baik jika kedua kunci dan nilai jenis yang primitif (jenis nilai seperti int, bool, double, dll) atau struct dari ukuran kecil. Dengan tipe primitif pada stack, alokasi dan deallocation sangat cepat. Ini benar-benar dapat memengaruhi performa, terutama sebagai argumen untuk panggilan metode rekursif.
Di sisi lain, Tuple<T1, T2>kemungkinan adalah pilihan yang lebih baik jika salah satu T1atau T2tipe referensi (seperti kelas). A KeyValuePairyang berisi pointer ke jenis referensi (sebagai kunci atau tipe nilai) semacam mengalahkan tujuan karena objek tetap perlu dicari di heap.
Ini patokan yang saya temukan secara online: Tuple vs. KeyValuePair . Satu-satunya masalah dengan tolok ukur ini adalah bahwa mereka menguji KeyValuePair<string, string>vs. Tuple<string, string>, dan stringtipenya adalah tipe yang tidak biasa dan khusus dalam .NET yang dapat berperilaku seperti tipe nilai dan / atau tipe referensi tergantung pada konteks eksekusi. Saya yakin itu KeyValuePair<int, int>akan menjadi pemenang yang jelas melawan Tuple<int, int>. Meskipun terdapat kekurangan, namun, hasilnya menunjukkan bahwa perbedaan kinerja dapat menjadi signifikan:
8,23 ns - Alokasikan Tuple
0,32 ns - Alokasikan KeyValuePair (25x lebih cepat!)
1,93 ns - Lewati Tuple sebagai argumen
2,57 ns - Lulus KeyValuePair sebagai argumen
1,91 ns - Kembali Tuple
6,09 ns - Kembalikan KeyValuePair
2.79 ns - Muat Tuple dari Daftar
4.18 ns - Muat KeyValuePair dari Daftar
KeyValuePairadalah kunci dan nilai, aTuple<T1,T2>hanyalah sepasang nilai yang sama . Anda juga bisa bertanya: "mengapa saya harus menggunakanList<Class>jika saya dapat menggunakanDictionary<A,B>".