Bayangkan kodenya:
public class obj
{
// elided
}
public static Dictionary<string, obj> dict = new Dictionary<string, obj>();
Metode 1
public static obj FromDict1(string name)
{
if (dict.ContainsKey(name))
{
return dict[name];
}
return null;
}
Metode 2
public static obj FromDict2(string name)
{
try
{
return dict[name];
}
catch (KeyNotFoundException)
{
return null;
}
}
Saya ingin tahu apakah ada perbedaan kinerja 2 fungsi ini, karena yang pertama HARUS lebih lambat dari yang kedua - mengingat bahwa perlu memeriksa dua kali jika kamus berisi nilai, sedangkan fungsi kedua hanya perlu mengakses kamus saja sekali tetapi WOW, sebenarnya berlawanan:
Ulangi untuk 1 000 nilai nilai (dengan 100.000 ada dan 900.000 tidak ada):
fungsi pertama: 306 milidetik
fungsi kedua: 20483 milidetik
Mengapa demikian?
EDIT: Seperti yang Anda lihat dalam komentar di bawah pertanyaan ini, kinerja fungsi kedua sebenarnya sedikit lebih baik daripada yang pertama jika ada 0 kunci yang tidak ada. Tetapi begitu ada setidaknya 1 atau lebih kunci tidak ada, kinerja yang kedua menurun dengan cepat.
O(1)
mencari di kamus ... Terutama karena melakukan dua O(1)
operasi masih asimptotik O(1)
.
ContainsKey
diharapkanO(1)
...