Delphinesneye yönelik programlama desteği zengin ve güçlüdür. Sınıflar ve nesneler modüler kod programlamaya izin verir. Daha modüler ve daha karmaşık bileşenlerle birlikte daha sofistike ve daha karmaşık hale gelir böcek.
Gelişirken Delphi uygulamaları (neredeyse) her zaman eğlencelidir, tüm dünyanın size karşı olduğunu hissettiğiniz durumlar vardır.
Delphi'de bir nesneyi kullanmanız (oluşturmanız) gerektiğinde, tükettiği belleği boşaltmanız gerekir (artık gerekli değildir). Elbette, try / nihayet bellek koruma blokları bellek sızıntılarını önlemenize yardımcı olabilir; kodunuzu korumak hala size bağlıdır.
Program tükettiği belleği boşaltma yeteneğini kaybettiğinde bellek (veya kaynak) sızıntısı oluşur. Tekrarlanan bellek sızıntıları, bir işlemin bellek kullanımının sınırsız büyümesine neden olur. Bellek sızıntıları ciddi bir sorundur - bellek sızıntısına neden olan bir kodunuz varsa, çalışan bir uygulamada 7/24, uygulama mevcut tüm belleği tüketir ve son olarak makinenin yanıt vermeyi durdurur.
Delphi'de Bellek Sızıntıları
Bellek sızıntılarından kaçınmanın ilk adımı, bunların nasıl meydana geldiğini anlamaktır. Aşağıda, sızıntısız Delphi kodu yazmak için bazı yaygın tuzaklar ve en iyi uygulamalar hakkında bir tartışma yer almaktadır.
Bir forma (tasarım zamanında) bıraktığınız bileşenleri (Düğmeler, Notlar, Düzenlemeler vb.) Kullandığınız çoğu (basit) Delphi uygulamasında, bellek yönetimi ile çok fazla ilgilenmeniz gerekmez. Bileşen bir forma yerleştirildikten sonra form, sahip ve form kapatıldığında (yok edildiğinde) bileşen tarafından alınan belleği serbest bırakır. Form, sahibi olarak, barındırdığı bileşenlerin hafızaya yerleştirilmesinden sorumludur. Kısacası: bir formdaki bileşenler otomatik olarak oluşturulur ve imha edilir
Bellek Sızıntısı Örnekleri
Önemsiz Delphi uygulamalarında, Delphi bileşenlerini çalışma zamanında örnekleme. Ayrıca, kendi özel sınıflarınızdan bazılarına sahip olacaksınız. Diyelim ki DoProgram yöntemi olan bir sınıf TDeveloper var. Şimdi, TDeveloper sınıfını kullanmanız gerektiğinde, sınıfın bir örneğini Oluşturmak yöntem (kurucu). Oluşturma yöntemi yeni bir nesne için bellek ayırır ve nesneye bir başvuru döndürür.
var
zarko: TDeveloper
başla
zarko: = TMyObject. Oluşturmak;
zarko. DoProgram;
son;
Ve işte basit bir bellek sızıntısı!
Bir nesne oluşturduğunuzda, işgal ettiği belleği atmanız gerekir. Ayrılan bir nesnenin belleğini boşaltmak için, Bedava yöntem. Tam olarak emin olmak için try / nihayet bloğunu da kullanmalısınız:
var
zarko: TDeveloper
başla
zarko: = TMyObject. Oluşturmak;
Deneyin
zarko. DoProgram;
en sonunda
zarko. Bedava;
son;
son;
Bu, güvenli bellek ayırma ve ayırma kodunun bir örneğidir.
Bazı uyarı sözcükleri: Bir Delphi bileşenini dinamik olarak başlatmak ve bir süre sonra açıkça serbest bırakmak istiyorsanız, sahibi olarak her zaman nil iletin. Aksi takdirde, performans ve kod bakım problemlerinin yanı sıra gereksiz riskler ortaya çıkabilir.
Oluştur ve Ücretsiz yöntemlerini kullanarak nesne oluşturmanın ve yok etmenin yanı sıra, "harici" (dosyalar, veritabanları, vb.) Kaynakları kullanırken de çok dikkatli olmalısınız.
Diyelim ki bazı metin dosyaları üzerinde işlem yapmanız gerekiyor. Diskteki bir dosyayı bir dosyayla ilişkilendirmek için AssignFile yönteminin kullanıldığı çok basit bir senaryoda değişkeni dosya ile işiniz bittiğinde, dosya tanıtıcısını başlatmak için CloseFile'ı çağırmalısınız. Kullanılmış. Burası "Ücretsiz" için açık bir çağrınızın olmadığı yerdir.
var
F: TextFile;
S: dize;
başla
AssignFile (F, 'c: \ somefile.txt');
Deneyin
Readln (F, S);
en sonunda
CloseFile (F);
son;
son;
Başka bir örnek, kodunuzdan harici DLL'lerin yüklenmesini içerir. LoadLibrary'yi her kullandığınızda, FreeLibrary'yi aramanız gerekir:
var
dllHandle: THandle;
başla
dllHandle: = Loadlibrary ('MyLibrary. DLL ');
// bu DLL ile bir şeyler yap
dllHandle <> 0 ise FreeLibrary (dllHandle);
son;
.NET bellek sızıntıları?
.NET için Delphi ile çöp toplayıcı (GC) çoğu bellek görevini yönetse de, .NET uygulamalarında bellek sızıntısı olması mümkündür. İşte bir makale tartışması Delphi for .NET için GC.
Bellek Sızıntılarına Karşı Nasıl Mücadele Edilir
Modüler bellek güvenli kod yazmanın yanı sıra, mevcut üçüncü taraf araçlar kullanılarak bellek sızıntılarını önleme yapılabilir. Delphi Bellek Sızıntısı Düzeltme Araçları Delphi uygulamasını yakalamanıza yardımcı olur hatalar bellek bozulması, bellek sızıntıları, bellek ayırma hataları, değişken başlatma hataları, değişken tanımlama çakışmaları, işaretçi hataları ve daha fazlası gibi.