25 Haziran 2012

JDialog ile HIDE_ON_CLOSE mi DISPOSE_ON_CLOSE mi kullanılmalı? | DISPOSE_ON_CLOSE HDE_ON_CLOSE used by JDialog?

JDialog oluştururken HIDE_ON_CLOSE kullanıyordum. Denemeler arasında bilgisayarın aşırı yavaşlayıp donmaya başlamasıyla çözüm arayışında HIDE_ON_CLOSE ile DISPOSE_ON_CLOSE arasındaki farkı öğrenirsem düzeltebileceğimi düşündüm. Ve öyle de oldu işte o kavram arasındaki önemli fark:

HIDE_ON_CLOSE: Pencereyi gizler ram üzerinde tutmaya devam eder. Kullanıcının daha sonra çağırmasını bekler.


DISPOSE_ON_CLOSE: Pencereyi gizler ram üzerindeki verilerini temizler. Kullanıcının daha sonra çağırmasını beklemez. Pencere açılacağı zaman yeniden oluşturulması gereklidir.

Kaynak

2 yorum:

  1. Bu durum bir dezavantajı da beraberinde getirir gibi görünüyor. Eğe dialogları dispoe_on_close ile kapatırsak tekrar açılacağında ramdan çağrılmayacağından açılış süresi artar ama yine de bu metod programın şişmesini engelleyeceğinden etkili gibi görünüyor. Güzel makale tebrikler.

    YanıtlaSil
  2. Kullanım alanına göre değişebiliyor. Eğer "new NesneGui();" şeklinde bir kullanım için dispose_on_close öneririm. Neden? Çünkü uygulamada komut her tetiklendiğinde yeni bir nesne oluşturularak uygulamanın şişmesine sebebiyet verecektir. NesneGui kapatıldığında aslında kapatılmayıp sadece visible durumu false olmuştur. Nesne kapatılmamış gizlenmiştir. Eğer aynı durum için dispose_on_close kullanılmış olsaydı visible false yerine pencere yokedilmiş olup ramden silinecektir. Uygulama performans konusuna gelince hide_on_close kullanarak dispose_on_close ile yapmaya çalıştığımız uygulamadan daha da hızlı bir uygulama geliştirebiliriz. Bunu da NesneGui penceresini "singleton" tasarım şablonu ile oluşturmamız gerekmektedir. "new NesneGui" yerine "NesneGui.getInstance" şeklinde çağırarak -bu noktaya dikkat- nesne eğer daha önceden açılmışsa o nesneyi getirecek açılmamışsa yeni oluşturulacaktır. Singleton tasarım kabılıyla oluşturduğumuz nesnede de dispose_on_close kullanmış olsaydık her seferinde yeniden oluşturup uygulamayı yine yavaşlatacaktır. Pencere küçükse, çok fazla ram kullanmıyorsa tasarım kabıyla uğraşmak yerine dispose_on_close kullanarak hafif uygulamalarda kodu kısaltmış temiz bir kod oluşturmuş oluruz.

    Teşekkürler.

    YanıtlaSil