• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Soru 50 Mb Üzeri Excel Dosyalarında VBA Makrolarının Bellek Tüketimi (Out of Memory) ve Şişme Sorunu

bark

Yeni Üye
Katılım
2 Kas 2022
Mesajlar
3
Aldığı beğeni
0
Katkı
%0.00
Excel V
Office 2021 TR
Konu Sahibi
Merhaba hocalarım, şirket içinde kullandığımız ve boyutu 60 MB'ı bulan çok yoğun formüllü ve veri yüklü bir ana dosyamız var. Bu dosya üzerinde çalışan bazı büyük VBA döngülerimiz var (yaklaşık 800 bin satırı tarayıp rapor üretiyor). Makro çalışmaya başladıktan 3-4 dakika sonra Excel doğrudan 'Out of Memory' (Yetersiz Bellek) hatası veriyor ya da donup kapanıyor.Kodun içinde Application.ScreenUpdating = False ve CalculationAutomatic ayarlarını kapatıyorum ama yine de RAM tüketimi tavan yapıyor. Nesneleri Set ... = Nothing yapsam da Excel arka planda hafızayı boşaltmıyor gibi. Bu tarz devasa boyutlu kurumsal dosyalarda VBA'in bellek yönetimini optimize edecek, makronun Excel'i patlatmasını önleyecek ileri düzey teknik bir çözüm veya kod mimarisi var mıdır? Örnek veri yapısını ve kullandığım makro bloğunu ekteki dosyaya koydum. Desteğiniz çok makbule geçer.
 

Ekli dosyalar

Merhaba hocalarım, şirket içinde kullandığımız ve boyutu 60 MB'ı bulan çok yoğun formüllü ve veri yüklü bir ana dosyamız var. Bu dosya üzerinde çalışan bazı büyük VBA döngülerimiz var (yaklaşık 800 bin satırı tarayıp rapor üretiyor). Makro çalışmaya başladıktan 3-4 dakika sonra Excel doğrudan 'Out of Memory' (Yetersiz Bellek) hatası veriyor ya da donup kapanıyor.Kodun içinde Application.ScreenUpdating = False ve CalculationAutomatic ayarlarını kapatıyorum ama yine de RAM tüketimi tavan yapıyor. Nesneleri Set ... = Nothing yapsam da Excel arka planda hafızayı boşaltmıyor gibi. Bu tarz devasa boyutlu kurumsal dosyalarda VBA'in bellek yönetimini optimize edecek, makronun Excel'i patlatmasını önleyecek ileri düzey teknik bir çözüm veya kod mimarisi var mıdır? Örnek veri yapısını ve kullandığım makro bloğunu ekteki dosyaya koydum. Desteğiniz çok makbule geçer.
dosyayı farklı kaydet deyip xlsm formatında değil de ikili dosya biçimi xlsb formatında kaydedip dener misiniz.
 
Konu Sahibi
volki_112 hocam selamlar, destek için teşekkür ederim. Dediğiniz gibi ikili dosya biçimi .xlsb olarak kaydettim, dosya boyutunda ciddi bir küçülme oldu valla elinize sağlık. Ama makro döngüsünü başlattığımda maalesef yine 4. dakikada donup 'Out of Memory' vererek patladı. Dosya boyutu küçülse de makro çalışırken RAM tüketimi tavan yapmaya devam ediyor. VBA tarafında bu bellek yükünü hafifletmenin başka bir yolu var mıdır?
 
Dosyada kodları göremedim ama
büyük veri setlerinde değerleri diziye alarak çalışmak
çok daha hızlı sonuçlar verir.
 
Konu Sahibi
Yanıtınız için çok teşekkürler Patron hocam. Haklısınız, ben klasik hücre döngüsü kullandığım için sanal bellek (Virtual RAM) logları bir süre sonra kilitleniyor.
Tabloyu bir Variant diziye atayıp döngüyü tamamen RAM üzerinde döndürmek performansı kesinlikle uçuracaktır. Bu dizi mantığını 800 bin satırlık büyük bir veri seti için VBA'de en optimize şekilde nasıl kurgulayabiliriz? Mantığı oturtmam için ufak bir kod yapısı paylaşabilir misiniz hocayı zorlamayacaksa? Çok makbule geçer.
 
Küçük bir örnek.
modül içinde aynı işi yapan klasik ve dizi yöntemi ile iki makro var
 

Ekli dosyalar

Yanıtınız için çok teşekkürler Patron hocam. Haklısınız, ben klasik hücre döngüsü kullandığım için sanal bellek (Virtual RAM) logları bir süre sonra kilitleniyor.
Tabloyu bir Variant diziye atayıp döngüyü tamamen RAM üzerinde döndürmek performansı kesinlikle uçuracaktır. Bu dizi mantığını 800 bin satırlık büyük bir veri seti için VBA'de en optimize şekilde nasıl kurgulayabiliriz? Mantığı oturtmam için ufak bir kod yapısı paylaşabilir misiniz hocayı zorlamayacaksa? Çok makbule geçer.
kodlarını yapay zekaya ver. bu kodu en hızlı ve verimli şekilde pc yi yormayacak şekilde nasıl yazabiliriz diye sor
 
Geri
Üst