0Pricing
Ruby Academy · Ders

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_objects sü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 s

Anahtar 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.inspect

Yü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
end

Dize 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 buffer

Nesne 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.stat ile 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

  1. Performans Ölçme
  2. Profil Oluşturma Araçları
  3. Bellek En İyileştirme
  4. Yaygın Darboğazlar
← Ruby Academy Sayfasına Dön