Bellek En İyileştirme
Ayırma işlemlerini azaltın
Bellek En İyileştirme, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.
Bellek Neden Önemlidir
Ruby'nin oluşturduğu her nesne belleğe mal olur ve çöp toplama işini artırır. Daha az ayırma, daha hızlı ve daha yalın programlar demektir.
- Çöp toplayıcı nesneleri geri kazanmak için duraklar
- Yüksek ayırma hızları daha fazla çöp toplama çalışmasını tetikler
- Ayırmaları azaltmak çoğu zaman en büyük kazanımı sağlar
before = GC.stat(:total_allocated_objects)
100.times { 'new string' + '!' }
after = GC.stat(:total_allocated_objects)
puts "Allocated: #{after - before} objects"Ayırmaları Sayma
GC.stat, bir bloğun öncesi ve sonrasındaki değerleri karşılaştırabileceğiniz ayırma sayaçlarını açığa çıkarır.
:total_allocated_objectssürekli artar- Bir bölümü ölçmek için önceki ve sonraki değerlerin farkını alın
def allocations
before = GC.stat(:total_allocated_objects)
yield
GC.stat(:total_allocated_objects) - before
end
puts allocations { Array.new(1000) { |i| i.to_s } }Dondurulmuş Dize Değişmezleri
Tekrarlanan dize değişmezlerinin her biri yeni bir nesne için bellek ayırır. Bunları dondurmak, Ruby'nin tek bir değişmez örneği yeniden kullanmasını sağlar.
- Sihirli yorumu dosyanın en üstüne ekleyin
- Veya tek tek değişmezler üzerinde
.freezeçağırın
# frozen_string_literal: true
s1 = 'hello'
s2 = 'hello'
puts s1.equal?(s2)Döngülerde Bellek Ayırmaktan Kaçının
Sıkı döngülerin içinde nesne oluşturmak, bellek ayırma işlemlerini katlar. Sabitleri döngünün dışına taşıyın.
- Düzenli ifadeleri, dizileri ve dizeleri bir kez oluşturun
- Yinelemeler boyunca bunları yeniden kullanın
PATTERN = /\d+/
def count_numbers(lines)
lines.count { |line| line.match?(PATTERN) }
end
puts count_numbers(['a1', 'bb', 'c3'])Değiştiren Yöntemler (Ünlemli)
Ünlemsiz yöntemler yeni nesneler döndürür; ünlemli yöntemler nesneyi yerinde değiştirerek bellek ayırma işlemlerinden tasarruf sağlar.
map!,gsub!,sort!- Yalnızca özgün nesneyi değiştirmenin güvenli olduğu durumlarda kullanın
arr = [3, 1, 2]
arr.sort!
puts arr.inspect
s = 'hello world'
s.upcase!
puts sAnahtar Olarak Semboller ve Dizeler
Semboller dahili olarak tekilleştirilir: aynı sembol tek bir ortak nesne olarak tutulur. Bunları karma tablo anahtarları için kullanın.
- Dize anahtarları her seferinde yeni bir dize için bellek ayırır
- Semboller, tekrarlanan aramalarda bellekten tasarruf sağlar
puts :name.equal?(:name)
puts 'name'.equal?('name')Tembel Numaralandırıcılar
map ve select işlemlerini zincirlemek, ara diziler oluşturur. lazy, öğeleri teker teker işler.
- Ara koleksiyonlar için bellek ayrılmaz
- Büyük veya sonsuz diziler için idealdir
result = (1..Float::INFINITY).lazy
.select { |n| n.even? }
.map { |n| n * n }
.first(5)
puts result.inspectYüklemek Yerine Akışla İşleme
Bir dosyanın tamamını belleğe okumak israftır. Bunun yerine satır satır akışla işleyin.
each_line, her seferinde bir satırı işler- Dosya boyutundan bağımsız olarak sabit bellek kullanır
text = "line1\nline2\nline3"
text.each_line do |line|
puts line.strip.upcase
endDize Birleştirme
Bir döngüde + ile dize oluşturmak, her seferinde yeni bir dize için bellek ayırır. Yerinde ekleme yapmak için << kullanın.
+yeni bir nesne oluşturur<<mevcut arabelleği değiştirir
buffer = String.new
5.times { |i| buffer << "item#{i} " }
puts bufferNesne Havuzlama ve Yeniden Kullanım
Pahalı nesneleri yeniden oluşturmak yerine yeniden kullanın.
- Ayrıştırılmış config değerlerini veya derlenmiş düzenli ifadeleri önbelleğe alın
- Bir sabit veya önbelleğe alınmış değer kullanın
def config
@config ||= { host: 'localhost', port: 4567 }
end
puts config.equal?(config)İçgörü İçin GC'yi Tetikleme
İyileştirmeleri doğrulamak için GC davranışını inceleyebilirsiniz.
GC.stat(:count), kaç GC çalıştırmasının gerçekleştiğini gösterir- İyileştirmeden sonra daha az çalıştırma olması iyiye işarettir
start = GC.stat(:count)
50_000.times { |i| [i] }
puts "GC runs: #{GC.stat(:count) - start}"Hızlı Kontrol
Bellek kullanımını iyileştirme konusundaki bilginizi sınayın.
Özet
Bellek kullanımını iyileştirmeyi öğrendiniz:
GC.statile bellek ayırma işlemlerini sayın- Dize değişmezlerini dondurun ve nesneleri yeniden kullanın
- Yeni nesneler oluşturmaktan kaçınmak için ünlemli yöntemleri ve
<<ifadesini tercih edin - Anahtarlar için sembolleri, işlem zincirleri için tembel numaralandırıcıları kullanın
- Büyük verileri tamamını yüklemek yerine akışla işleyin
Sırada yaygın performans darboğazlarını ele alacaksınız.
Sıkça Sorulan Sorular
“Bellek En İyileştirme” dersi ücretsiz mi?
Evet — “Bellek En İyileştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.
“Bellek En İyileştirme” dersinde ne öğreneceğim?
Ayırma işlemlerini azaltın Ruby Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Ruby Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Bellek En İyileştirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Ruby Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Ruby Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Performans Ölçme
- Profil Oluşturma Araçları
- Bellek En İyileştirme
- Yaygın Darboğazlar