Test kodunu Sam ile karşılaştırdığımızda ikimizin de haklı olduğunu belirledim!
Ancak, farklı şeyler hakkında:
- Belleğe (okuma ve yazma) erişmek her yerde olduğu kadar hızlıdır - yığın, genel veya yığın.
- Ayrılacak bunu, ancak, öbek üzerinde en yavaş yığın en hızlı ve.
Böyle giderse: stack
< global
< heap
. (ayırma zamanı)
Teknik olarak, yığın ayırma gerçekten bir ayırma değildir, çalışma zamanı yığının bir kısmının (kare?) dizi için ayrıldığından emin olur.
Yine de buna dikkat etmenizi şiddetle tavsiye ediyorum.
Aşağıdakileri tavsiye ederim:
- İşlevi asla terk etmeyen (örneğin referansını geçerek) dizileri sık sık oluşturmanız gerektiğinde , yığını kullanmak çok büyük bir gelişme olacaktır.
- Bir diziyi geri dönüştürebilirseniz, bunu istediğiniz zaman yapın! Yığın, uzun süreli nesne depolama için en iyi yerdir. (küresel belleği kirletmek hoş değildir; yığın kareleri kaybolabilir)
( Not : 1. sadece değer türleri için geçerlidir; referans türleri öbek üzerinde tahsis edilecek ve fayda 0'a düşürülecektir)
Sorunun kendisini cevaplamak için: Herhangi bir büyük yığın testi ile herhangi bir sorunla karşılaşmadım.
Ben sadece olası sorunları bir yığın taşması olduğuna inanıyorum, eğer fonksiyon çağrıları ve sistem zayıf çalışıyorsa iş parçacığı (ler) oluştururken bellek yetersiz olduğunda dikkatli değilseniz.
Aşağıdaki bölüm ilk cevabım. Yanlış-ish ve testler doğru değil. Sadece referans olarak saklanır.
Testim, yığına ayrılan belleği ve genel belleğin dizilerde kullanım için yığınla ayrılmış belleğe göre en az% 15 daha yavaş olduğunu gösteriyor!
Bu benim test kodum ve bu örnek bir çıktı:
Stack-allocated array time: 00:00:00.2224429
Globally-allocated array time: 00:00:00.2206767
Heap-allocated array time: 00:00:00.1842670
------------------------------------------
Fastest: Heap.
| S | G | H |
--+---------+---------+---------+
S | - | 100.80 %| 120.72 %|
--+---------+---------+---------+
G | 99.21 %| - | 119.76 %|
--+---------+---------+---------+
H | 82.84 %| 83.50 %| - |
--+---------+---------+---------+
Rates are calculated by dividing the row's value to the column's.
.NET 4.5.1 altında i7 4700 MQ kullanarak Windows 8.1 Pro'da (Güncelleme 1 ile)
test ettim. Hem x86 hem de x64 ile test ettim ve sonuçlar aynı.
Düzenleme : Tüm iş parçacıklarının yığın boyutunu 201 MB, örnek boyutunu 50 milyona çıkardım ve yinelemeleri 5'e düşürdüm
. Sonuçlar yukarıdakiyle aynıdır :
Stack-allocated array time: 00:00:00.4504903
Globally-allocated array time: 00:00:00.4020328
Heap-allocated array time: 00:00:00.3439016
------------------------------------------
Fastest: Heap.
| S | G | H |
--+---------+---------+---------+
S | - | 112.05 %| 130.99 %|
--+---------+---------+---------+
G | 89.24 %| - | 116.90 %|
--+---------+---------+---------+
H | 76.34 %| 85.54 %| - |
--+---------+---------+---------+
Rates are calculated by dividing the row's value to the column's.
Yine de, yığın aslında yavaşlıyor gibi görünüyor .