150K öğeye sahip Listem var. Ortalama çalışma süresi IndexOf(), Contains() öğesinden 4 kat daha düşük. Int'in listesini kullanmaya çalıştım. IndexOf dizeleri listesi için biraz daha hızlıdır.Neden Liste <T> .IndexOf() <T> Listesinden çok daha hızlı .Contains()?
Sadece bir ana fark buldum, bu özellik TargetedPatchingOptOut. MSDN söyler:
bu özellik uygulandığı için .NET Framework sınıf kütüphanesi yöntemi servis bültenleri tarafından değişmesinin pek mümkün olduğunu gösterir ve bu nedenle Özgün Görüntü Oluşturucu (NGen) görüntüleri arasında satır içine yerleştirilmiş uygun hale gelir.
Bu özellik böyle bir davranışın nedeni olabilir mi? Ve neden Contains() yöntemi böyle bir özelliğe sahip değil?
Şimdiden teşekkürler.
DÜZENLEME:
List<int> list = CommonHelper.GetRandomList(size); long min = long.MaxValue; long max = 0; long sum = 0; foreach (var i in list) { m_stopwatch.Reset(); m_stopwatch.Start(); list.Contains(i); // list.IndexOf(i); m_stopwatch.Stop(); long ticks = m_stopwatch.ElapsedTicks; if (ticks < min) min = ticks; if (ticks > max) max = ticks; sum += ticks; } long averageSum = sum/size;
EDIT 2: Aynı yazdım
Böyle kod şey var IndexOf() gibi kodu ve Contains() 'dan daha yavaş çalışır.
Bu durumda veriler nedir bir 150k büyüklüğünde seti ile bazı farkı dikkate olabilir "4x fark" fiili durum görünmemektedir göz önüne alındığında? –
Ve hayır - özniteliğin bununla ilgili bir şey olduğunu düşünmüyorum. –
Int ve string kullanıyorum, davranış aynı. –