Laboratuvar / Açık yöntem
.NET toplu aktarım: ürün koduyla eşleştirme
50.000 satırlık ürün aktarımı: 708,22 ms → 1,51 ms. Sentetik laboratuvar; 10 tekrarın medyanı. Kod ve ham veri açık.
Her satırda listeyi taraşu sistemeÜrün koduyla Dictionary erişimi
.NET 10 LABORATUVAR ÖLÇÜMÜ
Ürün kodunu her satırda listeden aramayın.
Sipariş dosyasındaki ürün kodlarını 10.000 ürünlük katalogla eşleştirme. Aynı .NET sürümü ve aynı sonuç; liste taraması yerine anahtarlı erişim.
Büyük ürün ve sipariş aktarımlarında beklemeyi ve tekrarlanan CPU işini azaltın. Dosyanın her satırı için bütün katalog yeniden aranmaz.
Her satırda listeyi tara
List.Find ve satır başına yakalayan lambda. Katalog sıralaması ve iş kuralı aynıdır.
- CPU süresi
- 705,682 ms
- Yönetilen bellek tahsisi (bayt)
- 4.801.064
Ürün koduyla Dictionary erişimi
İndeksin kurulması ve çıktı dizisi dahil. Dictionary eski .NET sürümlerinde de vardır.
- CPU süresi
- 1,528 ms
- Yönetilen bellek tahsisi (bayt)
- 684.080
FrozenDictionary kontrolü
Salt okunur modern API; kurulum maliyeti dahil. Her dosyada daha hızlı olacağı varsayılmaz.
- CPU süresi
- 1,991 ms
- Yönetilen bellek tahsisi (bayt)
- 1.610.160
Çubuklar sıfırdan başlar; tüm uygulamalarda aynı süre ölçeği kullanılır.
List.Find ile tekrarlanan aramaları, ürün koduna göre Dictionary erişimiyle değiştirdik. İndeksi her dosyada yeniden kurduk ve bu süreyi toplamdan çıkarmadık. FrozenDictionary alternatifini ayrıca ölçtük.
Tüm yük noktaları ve ölçüm tablosu
| Uygulama | Medyan süre | CPU süresi | Yönetilen bellek tahsisi (bayt) |
|---|---|---|---|
| Her satırda listeyi tara | 14,216 ms | 14,237 ms | 97.064 |
| Ürün koduyla Dictionary erişimi | 0,21 ms | 0,229 ms | 292.080 |
| FrozenDictionary kontrolü | 0,897 ms | 0,915 ms | 1.218.160 |
| Uygulama | Medyan süre | CPU süresi | Yönetilen bellek tahsisi (bayt) |
|---|---|---|---|
| Her satırda listeyi tara | 143,355 ms | 142,927 ms | 961.064 |
| Ürün koduyla Dictionary erişimi | 0,466 ms | 0,488 ms | 364.080 |
| FrozenDictionary kontrolü | 1,059 ms | 1,076 ms | 1.290.160 |
| Uygulama | Medyan süre | CPU süresi | Yönetilen bellek tahsisi (bayt) |
|---|---|---|---|
| Her satırda listeyi tara | 708,219 ms | 705,682 ms | 4.801.064 |
| Ürün koduyla Dictionary erişimi | 1,506 ms | 1,528 ms | 684.080 |
| FrozenDictionary kontrolü | 1,961 ms | 1,991 ms | 1.610.160 |
İş yükünüzle CPU maliyeti
Ölçülen işlemci süresini kendi aylık hacminizle karşılaştırın.
Bir çalıştırma = 50.000 Aktarılan dosya satırı.
Azalan CPU süresi / ay1,956 saat
İşlem bedeli farkı / ay—Birim bedel girildiğinde hesaplanır.
Laboratuvar CPU süresi × girdiğiniz hacim ve birim bedel. Hosting faturası tahmini değildir; boşta kaynak, ağ, depolama, lisans ve geçiş dahil değil.
Kendiniz deneyin
Kayıtlı laboratuvar sonuçlarını birlikte oynatın.
Ölçek arttığında
İş yüküne göre süre
- Önce
- Sonra
İş yüküne göre süre (ms)
Tablo olarak göster
| Aktarılan dosya satırı | Önce | Sonra |
|---|---|---|
| 1.000 | 14,22 ms | 0,21 ms |
| 10.000 | 143,36 ms | 0,47 ms |
| 50.000 | 708,22 ms | 1,51 ms |
Nasıl ölçtük?
Ortam, protokol ve teknik değerlendirme
Ortam ve veri
- Ortam
- Apple M3; Docker Linux arm64; 1 CPU, 768 MiB; .NET 10.0.13. Paylaşılan geliştirici bilgisayarı.
- Veri seti
- 10.000 ürün; 1.000/10.000/50.000 dosya satırı. Her 17. satır bilinmeyen SKU; sıra, fiyat ve adetler sabit.
- Araçlar
- .NET 10.0.13 · Stopwatch · Linux CLOCK_PROCESS_CPUTIME_ID · GC.GetTotalAllocatedBytes(true) · Independent Python SHA-256 output oracle · DOTNET_TieredCompilation=0
- Tekrarlar
- 3 boyut × 3 uygulama × 10 ölçüm; ayrıca 18 ısınma. Aynı süreç, sabit karıştırılmış sıra; bütün çıktılar doğrulandı.
Ürün kodunu her satırda listeden aramayın.
Sipariş dosyasındaki ürün kodlarını 10.000 ürünlük katalogla eşleştirme. Aynı .NET sürümü ve aynı sonuç; liste taraması yerine anahtarlı erişim.
Aynı .NET 10 runtime'ında aynı katalog ve sipariş satırları. Her kol/boyut için iki ısınma ve on ölçüm; toplam 108 gözlem. İndeks kurma ve çıktı dizisini üretme toplam sürede. Test girdisi üretimi, ölçüm öncesi GC ve çıktı SHA-256'sı bütün kollarda süre dışında. İş kuralından bağımsız Python oracle'ı her çıktının little-endian int64 SHA-256'sını, sayısını, eksik SKU ve kuruş toplamını doğrular. CPU, Linux process CPU clock; bellek, yönetilen tahsis farkı. Birincil nokta önceden seçilen 50.000 satırdır.
Ölçüm betiğini inceleyin ↗İşinize ne kazandırır?
Büyük ürün ve sipariş aktarımlarında beklemeyi ve tekrarlanan CPU işini azaltın. Dosyanın her satırı için bütün katalog yeniden aranmaz.
Değişiklik ve kapsam
List.Find ile tekrarlanan aramaları, ürün koduna göre Dictionary erişimiyle değiştirdik. İndeksi her dosyada yeniden kurduk ve bu süreyi toplamdan çıkarmadık. FrozenDictionary alternatifini ayrıca ölçtük.
.NET 10.0.13; Linux arm64 Docker, 1 CPU kotası, 768 MiB. Bellekte hazırlanmış satırları eşleştirme; CSV okuma ve veritabanına yazma dahil değil. Aynı runtime üzerinde algoritma değişimi; .NET Framework → 10 hız karşılaştırması değildir. Yönetilen tahsis sayacı tepe bellek veya RSS değildir. Küçük dosyada indeksin kurulum ve tahsis maliyeti de görünür.
İndeksin kurulması da işin içinde
Dictionary ve FrozenDictionary her dosyada yeniden kurulur. Aşağıdaki kurulum süreleri ana grafikteki toplamın içindedir; çıkarılmadı.
| Dosya satırı | Dictionary kurulumu | FrozenDictionary kurulumu |
|---|---|---|
| 1.000 | 0,183 ms | 0,871 ms |
| 10.000 | 0,187 ms | 0,873 ms |
| 50.000 | 0,183 ms | 0,923 ms |
FrozenDictionary, uzun süre yaşayan ve çok okunan kataloglarda değerlendirilir. Bu tek dosya akışında daha pahalı çıkması saklanmaz. Küçük dosyalarda indeksin ek tahsisi eski listeden yüksek olabilir; tüm boyutlar ve tahsis sayaçları etkileşimli tabloda.
Runtime ile algoritmayı ayırıyoruz
Listeyi tekrar tarama davranışı modern bir runtime’a taşınınca kendiliğinden kaybolmaz. Dictionary yaklaşımı eski .NET uygulamasına da uygulanabilir. Bu deney, .NET Framework veya eski Windows sunucusunun destek/güvenlik durumunu ölçmez; runtime ve bağımlılık geçişi ayrıca uyumluluk, yama ve dağıtım denemeleriyle planlanır.
Kendi sisteminizde başlangıç
En çok bekleten işlemi, veri miktarını ve yoğun saatleri birlikte belirleyelim. Önce bu işin baz ölçümünü alır, sonra kodu ve erişim biçimini değiştirip aynı sonucu karşılaştırırız.
Ne yaptık?
İş kuralı ve veri
YZSentetik iş akışı, testler ve ölçüm otomasyonu hazırlandı.
DoğrulamaYayınlanan kod ve ham sonuçlar incelemeye açıktır; müşteri projesi değildir.
Uygulama değişikliği
YZList.Find ile tekrarlanan aramaları, ürün koduna göre Dictionary erişimiyle değiştirdik. İndeksi her dosyada yeniden kurduk ve bu süreyi toplamdan çıkarmadık. FrozenDictionary alternatifini ayrıca ölçtük.
DoğrulamaÇıktı eşitliği bağımsız kontrolle doğrulandı; bütün tekrarlar pakette tutuldu.