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.

TamamlandıKOBİKurumsal BTPartner

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.

İşinize etkisi

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.

ÖNCEHer satırda listeyi tara
YENİLENENÜrün koduyla Dictionary erişimi
Aktarılan dosya satırı50.000
1.000Yalnız ölçülen yükler50.000
Gerçek zaman ölçeği
AYNI İŞ · AYNI VERİ10 tekrar · medyan
01

Her satırda listeyi tara

List.Find ve satır başına yakalayan lambda. Katalog sıralaması ve iş kuralı aynıdır.

708,219 ms
CPU süresi
705,682 ms
Yönetilen bellek tahsisi (bayt)
4.801.064
02

Ürün koduyla Dictionary erişimi

İndeksin kurulması ve çıktı dizisi dahil. Dictionary eski .NET sürümlerinde de vardır.

1,506 ms
CPU süresi
1,528 ms
Yönetilen bellek tahsisi (bayt)
684.080
03

FrozenDictionary kontrolü

Salt okunur modern API; kurulum maliyeti dahil. Her dosyada daha hızlı olacağı varsayılmaz.

1,961 ms
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.

Tamamlanma süresi azaldı99,8%Süre farkı: 706,713 msEski uygulama → yenilenen uygulama
Ne değişti?

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
1.000 · Aktarılan dosya satırı
UygulamaMedyan süreCPU süresiYönetilen bellek tahsisi (bayt)
Her satırda listeyi tara14,216 ms14,237 ms97.064
Ürün koduyla Dictionary erişimi0,21 ms0,229 ms292.080
FrozenDictionary kontrolü0,897 ms0,915 ms1.218.160
10.000 · Aktarılan dosya satırı
UygulamaMedyan süreCPU süresiYönetilen bellek tahsisi (bayt)
Her satırda listeyi tara143,355 ms142,927 ms961.064
Ürün koduyla Dictionary erişimi0,466 ms0,488 ms364.080
FrozenDictionary kontrolü1,059 ms1,076 ms1.290.160
50.000 · Aktarılan dosya satırı
UygulamaMedyan süreCPU süresiYönetilen bellek tahsisi (bayt)
Her satırda listeyi tara708,219 ms705,682 ms4.801.064
Ürün koduyla Dictionary erişimi1,506 ms1,528 ms684.080
FrozenDictionary kontrolü1,961 ms1,991 ms1.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)

02004006008001.00010.00050.000708,22 ms1,51 ms

Veri noktasını seçin

02004006008001.00050.000708,22 ms1,51 ms

Veri noktasını seçin

Aktarılan dosya satırıİşaretçiler: ölçülen noktalar
Tablo olarak göster
İş yüküne göre süre
Aktarılan dosya satırıÖnceSonra
1.00014,22 ms0,21 ms
10.000143,36 ms0,47 ms
50.000708,22 ms1,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ı.
Ham ölçüm verisini açın ↗

Ü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?

  1. İş 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.

  2. 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.