Hafızaya alınan değişkenlerin boşaltılması

Katılım
17 Nisan 2015
Mesajlar
42
Excel Vers. ve Dili
2016 OFFİCE
dim satir as long nasıl boşaltılır ?
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Şöyle.:cool:
satir = 0
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Bildiğim kadarıyla a = Empty şeklinde yazıldığında da sonuç değişmez.
Örneğin aşağıdaki kodu çalıştırırsanız sonucun aynı oldu görülebilir.
Rich (BB code):
Sub deneme()
Dim a As Long, b As Long
    a = 5000
    b = 1000
    a = Empty: b = 0
If a = b Then  MsgBox "SONUÇ AYNI:" & vbLf & "a değişkeni: " & a & vbLf & "b değişkeni: " & b
End Sub
Konuyla ilgili olabilecek genel bir şey yazayım (ahkam kesecek bilgim olduğunu söyleyemem elbette ama tecrübi sonuç) :
-- VBA ekranında iken, VIEW menüsünden LOCALS WINDOW'u seçtiğinizde, VBA ekranının sağ alt tarafından bir bölünmüş ekran kısmı oluşur.
-- Bir makro kodu F8 tuşuyla adım adım çalıştırdığınızda, değişkenlerin aldığı değerleri ve değişken türlerini görebilirsiniz.
Yapılan Dim ... As ..... tanımlaması, değişkene atanan değer ile uyumsuz ise HATA alırsınız zaten.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Bir değişkenin bellekteki ömrü declare edildiği bölge kadardır. Öncesinde yapılan Emty, Nothing, vbNullString gibi atamalar yalnızca değerini değiştirir.
Bölgeden çıkıldığında bellekten kendiliğinden silinir.
 
Katılım
17 Nisan 2015
Mesajlar
42
Excel Vers. ve Dili
2016 OFFİCE
Demek, sub ile end sub arasında dim as a variant veya başka biri long olsun...Bu sub ile and sub arasında işlem end sub ile bittiğinde otamatik çıkması oluyorsa bu işlem çokda önemli değil o zaman.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Zeki Bey yazmışsa doğrusu odur.
23 numaralı cevapta da belirtmiştim: "ahkam kesecek bilgim olduğunu söyleyemem" diye.
.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Zeki Beyin dediği ideal şartlarda doğrudur ancak; yazılan kodlarda doğru dürüst bir hata denetimi yapılmazsa, herhangi bir hata oluşup da kodun çalışması beklenmedik bir şekilde durduğunda, özellikle CreateObject metodu ile oluşturulan uygulamalar (Internet Explorer, Excel, Word ....) bilgisayarın belleğini meşgul etmeye devam ederler ve bu da performansı ciddi bir şekilde etkiler. Bu nedenle hata denetimi yapıp, bu tür nesneleri boşaltmak gerekir.

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
CreateObject metodu ile oluşturulan uygulamalar (Internet Explorer, Excel, Word ....)
Maalesef aynı fikirde değilim üstad. Şöyle ki; CreateObject ile çağrılan parantez içindeki nesneler ayrı birer proses olarak başlar. Her prosesin de bellek alanı da diğer proseslerden ayrıdır. Bunu görev yöneticisinde de görebiliriz. Yani demek istediğim, CreateObject ile başlatılan bir Excel uygulamasının çalışma kitabındaki hücreler doldurulsa, resimler eklense bile kendi prosesine ait bellek alanı şişecektir. Yanılıyor muyum yoksa? Bu şekilde düşünmeme neden olan detay aşağıdaki gibi:

Microsoft VBA dökümanlarında Object (nesne) tipi şöyle tanımlanmış:
DataType : Object
Storage Size : 4 bytes (Bu bilginin eksik olduğunu düşünme nedenimi aşağıda açıklayacağım)
Range : Any Object Reference

Bu açıklamaya göre Object değişkeninin bir veri değil de, referans bellek adresi (pointer) tuttuğunu anlıyorum. Bu da pointer (bellek adresi) nin 4 byte, yani bir Long tam sayısına işaret ediyor.

4 byte'lık bellek işgali yanlış demeyelim de, eksik desek daha doğru olur. Çünkü, ObjPtr fonksiyonu, Object tipindeki değişkenin bellek adresini almak için kullanılmakta. Bu fonksiyon 64 bit Excel' de LongPtr yani 8 byte lık tamsayı döndürür. Bu nedenle Object değişkeni mimariye göre 4 veya 8 byte lık bellek alanı kullandığını düşünüyorum.

Umarım bu uzun açıklamayı okuyan başta Haluk Bey olmak üzere diğer forum dostlarının canını sıkmamışımdır. :) Herkes için faydalı olması dileğiyle...
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Üstadım; pratik (uygulama) bilgin kadar teorik bilgine ben her zaman hayranımdır, bunu da forumdaki bazı arkadaşlarla yaptığım sanal ve/veya yüz-yüze görüşmelerde her zaman dile getirmişimdir.

Klasik bir cevap olarak algılanmasını istemem ancak, benzer şeylerden bahsediyoruz ama herhalde ben tam olarak ifade edemedim... Zaten, imzamda da belirttiğim gibi; anlatmak, yazmaktan daha zor gelir bana :)

CreateObject ile oluşturulan bir nesne gayet tabii ki ayrı bir proses olarak başlar, buna kimsenin bir itirazı olamaz. Hatta, CreateObject ("Excel.Application") bile, kodun başlatıldığı Excel oturumundan/prosesinden ayrı bir proses olarak çalışır.

Ancak; Visible özelliği False olan bu prosesler, kodun hata ile karşılaştığı durumlarda eğer sonlandırılıp boşaltılmazlarsa, yine bilgisayarın ram'ini kullanmaya devam ederler, "Visible = False" olması durumunda da kullanıcı bunun farkında olamaz. Kod hata verdiğinde bu olayı, bilgisayarın Görev Yöneticisi ekranından da görebiliriz. Bu durumla en çok, Internet Explorer nesnesinin oluşturulduğu ve sunucunun cevap vermediği ve/veya benzeri durumlarda karşılaşırız. Web sitelerindeki tablolardan anlık olarak veri çekmek için sunuculara yollanan isteklerde bilinçsizce yazılan On Error Resume Next gibi ifadeler bu tip durumlara sıkça yol açar.

Umarım sıkıcı olmamışımdır, okuyan herkese selam ve sevgiler....

.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Hmm, ben nesneyi çağıran prosesin kaynak kullanımını artırıyor gibi algıladım. Konuyu yok yere uzattım, kusura bakmayın.
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
bilinçsizce yazılan On Error Resume Next gibi ifadeler bu tip durumlara sıkça yol açar.

.
Hocam ,Bu kodu yazanlar var.Ben yazdığım kodlarda mümkün olduğu kadar kullamıyom.
Çünkü hata veren satırı göremiyom.Bu çok tehlikeli bir kod.Kullansam bile hemen bu satırın 2 satır altına on error goto 0 yazıyorum.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Hmm, ben nesneyi çağıran prosesin kaynak kullanımını artırıyor gibi algıladım. Konuyu yok yere uzattım, kusura bakmayın.
Rica ederim üstad, ben düşüncemi tam olarak aktaramamıştım. Ondandır....

Hocam ,Bu kodu yazanlar var.Ben yazdığım kodlarda mümkün olduğu kadar kullamıyom.
Çünkü hata veren satırı göremiyom.Bu çok tehlikeli bir kod.Kullansam bile hemen bu satırın 2 satır altına on error goto 0 yazıyorum.
Aynen öyle, Evren Bey...... Antibiyotiği (On Error Resume Next) kullanırken, vitamin (On Error GoTo 0) ile beraber kullanmak gerekir.

.
 
Katılım
17 Nisan 2015
Mesajlar
42
Excel Vers. ve Dili
2016 OFFİCE
Bu konuya bir konu daha edeyim yada başka bir sayfa açarak fikir teatisi yapalım isterseniz... Çakışmalar ile alakalı bir konu açabiliriz. Site kullanmayı pek bilemiyorum. buradan bu konuya dahil ederek yapabiliriz. Çakışmaların önüne geçmek için neler yapabiliriz. değerli yorumlarınızı okumak isterim..Bende araştırma yaparak buraya yazacağım inşallah.
 
Üst