> Delphi > 7 Adımda Delphi Uygulamalarını Daha da Hızlandırın

7 Adımda Delphi Uygulamalarını Daha da Hızlandırın

Delphi, etkili ve hızlı sonuç alabileceğiniz nadir geliştirme ortamlarından birisi. Delphi’nin hızlı program geliştirme özelliği, bazen bizlerin müsrif davranmasına yol açabiliyor. Aslında birazdan vereceğim adımlardan bazıları, çoğu programlama dillerinde dikkat etmemiz gereken kurallardan. Uygulamayı dağıtmadan önce hız için dikkat etmemiz gerekenleri 7 adımda toplayıp sizlere sunuyorum.

  1. Otomatik Form Oluşturmayın: Normalde, projeye eklediğiniz her bir form uygulama tarafından otomatik olarak oluşturulmak üzere ayarlıdır. Bunu dpr dosyasının kaynak kodunda bulunan Application.CreateForm ile görebilrisiniz. Her ne kadar bu size formlara erişirken büyük kolaylık sağlasa da uygulamanın ilk çalışma zamanını önemli derece de yavaşlatmaktadır. Bu yüzden formları otomatik olarak oluşturmayın. Sadece ihtiyacınız olduğunda dinamik olarak oluşturun. Çoğu zaman sadece ana formu otomatik olarak oluşturmanız kafi glecektir.
  2. Mümkün Olduğunca Windows API’lerini Tercih Edin: Yapacağınız bir işlem için eğer Windows API’lerinde bu işi göre bir fonksiyon var ise, sakın ayrı bir fonksiyon yazmaya kalkmayın. Windows fonksiyonlarını kullanmak bizim için en hızlı yöntem olacaktır. Bu yüzden bir fonksiyon yazmadan önce Windows API’si içinde bu işi yapan başka bir fonksiyonun olup olmadığından emin olun.
  3. Küçük Fonskiyonlar İçin “inline” Direktifini Kullanın: Yeni Delphi sürümleri “inline” direktifini desteklemektedir. “inline” kullanmak exe boyutunu artıracaktır. Fakat hız da artacaktır. Eğer küçük fonskiyonlarınız varsa veya büyük olsa da çok fazla yerde kullanılmayan fonksiyonlarınız varsa, fonksiyon veya prosedür tanımlamasından sonra “inline” direktifini kullanın.
  4. Table yerine Query Tarzı Bileşenler Kullanın: TTable gibi bileşenleri mümkün olduğunca kullanmaktan çekinin. Bunun yerine TQuery veya TSqlQuery tarzı bileşenleri tercih edin.
  5. FastMM Kullanın: FastMM projesi, normalde Delphi 2005 ile Delphi’ye dahil oldu. Eğer daha düşük versiyon kullanıyorsanız kesinlikle FastMM kullanın. D2005 ve yukarısı için de yeni güncellemeler oldukça faydası olacaktır. Daha fazla bilgi için FastMM’i google’da arattırın.
  6. Kodlarınızı Yazarken Disiplinli Olun: Kodlarınızı yazarken değişken, sınıf, fonksiyon isimlendirmelerinde belli bir standarta uyun. Bıraktığınız kod yorumlarını daha sonradan bakacak mışsınız veya başka birisi projeyi devam ettirecekmişcesine yazın. Bu ve bunun gibi kendinize kurallar belirleyerek disiplinli bir şekilde kodlarınızı yazın. Bu size, daha sonradan programınızı bitirdikten sonra kolay bir optimizasyon imkanı sağlayacak. Tekrar kodlara dönüp baktığınızda disiplinli ve düzenli yazılmış bir kod göreceksiniz ve yavaş çalışan veya hatalı çalışan kısımları daha çabuk farkedip, kodunuzu optimize edebileceksiniz.
  7. Basm İle Optimizasyona Gidin: Basm yani Delphi içinde assembler kullanarak bazı önemli yerleri optimize edebilirsiniz. Özellikle hızın çok önemli olduğu yerleri bu şekilde optimize edebilirsiniz. Bununla ilgili olarak  daha önceden burada bir şeyler karalamıştık.

Tabi bunlar dışında hızı etkileyen başka faktörlerin de olduğunu unutmayın. Fakat ilk etapta bu adımlara dikkat etmeniz, programlarınızdaki çalışma hızını önemli derece artıracaktır. Buradaki adımların çoğunun tek dez avantajı, exe boyutunun biraz artabilmesi. Fakat bu devirde kimse exe boyutunu çok önemsemiyor.

Benim aklıma 7 adım geldi fakat sizlerin de önerileri olursa lütfen yorum yazarak katkıda bulununuz.

Güncelleme: 07.03.2009: Bu maddelere ek olarak buradaki yorumda bulunan 3 maddeye daha göz atmanızı tavsiye ediyorum. Saadettin beye teşekkürler.

Fatih Tolga Ata © 2009

» Tags: , ,

12 Comments

  • At 2009.02.26 13:07, L said:

    sa.
    çok yararlı bir döküman. bu işlemleri yaptığımızda hız 2 katına çıkıyor. VS 2008 ile karşılaştırırsak tabi. VS yede ayar çekmemiz lazım. neredeyse Deplhinin kodları derleme zamanının 2 katı daha zamanda derleme yapıyo..

    • At 2009.03.04 17:42, SimaWB said:

      Emeğinize sağlık.
      6. adımın başlıkla pek alakası yok sanırım. Elbette 6. adımı proje geliştirirken uygulamak lazım ama bu konu başlığında pek yeri yok gibi 🙁

      • At 2009.03.04 19:10, Fatih Tolga Ata said:

        6. adım, aksine, çok alakalı. O maddede anlatmak istediğimi tam verememiş olabilirim fakat bir defa daha 6. maddeyi okursanız ne demek istediğimi anlayacağınızı umuyorum. Performans düşüşlerinin bir çok nedenlerinden birisi de şüphesiz alelâde, gelişi güzel yazılan kodlardır. Eğer kod yazılırken belli bir disiplin izlenirse ileride kodları optimize etme imkanınız artar. Daha doğrusu, performansı düşüren kısımları görüp, kendinizi bu kodları optimize etmek için zorunlu hissedersiniz. Bu tabi ki uzun vadeli projeler için geçerli.

        • At 2009.03.07 04:48, sadettinpolat said:

          Oncelikle tesekkurler. Guzel ipuclari bunlar. Bende aklima gelen bir kac maddeyi yazayim.
          1-Delphi 2009 kullaniyorsaniz ve C++Builder destegi beni alakadar etmiyor diyorsaniz Project Options / Compiler bolumunden String Format Checking ozelligini off yapabilirsiniz.

          http://andy.jgknet.de/blog/?p=487

          2-Monitore yapilan cizimler icin oldukca fazla zaman harcanir. Bu nedenle rapor olustururken , belirli bir veriseti uzerinde dongulerle islem yapilirken eger kullanici icin onemli degilse ki cogu zaman onemli degildir monitore cikti veren bilesenlerin kendilerini tekrar tekrar ekrana cizmelerini onlemelisiniz. Bunuda en basit yoldan DataSet.DisableControls ile yapabilirsiniz. Dongu bitince EnableControls ile tekrardan acabilirsiniz.

          3-Profiler kullanin. Delphi uyumlu bir profiler ile programinizi inceleyin. Profiler ile hangi islemlerin ne kadar surdugunu ve programinizdaki dar bogazlari tespit edebilir hizlandirmak icin gerekli islemleri yapabilirsiniz.

          • At 2009.03.07 14:22, Fatih Tolga Ata said:

            Teşekkürler Saadettin bey, çok güzel ipuçları bunlar. Yazı içinden sizin yorumunuza da link verdim.

            • At 2009.03.11 15:55, Fatih said:

              API’lerin kullanımı hız anlamına gelse de, ilerki Windows ve Delphi sürümleri için uyum sorununa sebep olabilir.

              • At 2009.03.12 09:29, SimaWB said:

                Windows API’leri Delphi sürümüne göre değişebilir mi? API’ler İşletim sistemi ile alakalı değilmi? (Yanlış anlaşılmasın: bilmediğim için soruyorum)

                • At 2009.03.12 15:43, Fatih Tolga Ata said:

                  Eğer windowsda bir değişiklik olmuşsa tabiki VCL’de de değişiklik olacaktır. Fakat bu değişiklik alt planda olacağından VCL’i kullanan bizler bundan etkilenmeyiz. Fakat windows API’lerinde ek API’ler eklenmekle beraber, bazı API’lerin çıkarılması nadirattandır. Geriye uyumluluktan dolayı zaten böyle bir şeye pek girişmezler. Hatta şuandaki bir çok fonskiyon bile, Win3.1’deki fonksiyon isimlendirmesi ve parametre kullanımı ile aynıdır. Bu yüzden API’lerin kullanılmasında bir sakınca görmüyorum.

                  • At 2009.04.29 10:31, NakiSen said:

                    Merhaba

                    API kullanımı, platformlar arası kod taşınması gerektiği durumlarda yorucu sonuçlar doğurabilir. Kanımca geliştirme ortamının bize sunduğu kütüphaneleri kullanmak daha avantajlı olacaktır.

                    Ayrıca uygulamanızı Windows da geliştiriyorsanız, VCL kütüphanesi, olması gereken API’yi zaten kullanmıştır. Bundan dolayı API kullanımının performans açısından bir avantaj doğuracağını açıkcası düşünmüyorum.

                    • At 2009.09.16 14:03, hasan arif said:

                      birazdaha fonksiyonları anlatsa idin keske

                      • At 2010.09.21 11:11, bilgisayar said:

                        Merhaba,
                        Sitenizdeki bütün konuları inceleme fırsatım olmadı ama bikaç konuyu inceledim ve sayenizde çok yararlı bilgiler öğrendim.Sitenizde bu güzel bilgileri bizimle paylaştığınız için size çok teşekkür ediyorum.Bundan sonra blogunuzun sürekli takipcisi olacağım…

                        • At 2015.10.27 15:02, yücel said:

                          kitaplarda arayıp bulamadığımız bu ipuçlarını paylaştığınız için çok teşekkürler. takip ediyorum.

                          (Required)
                          (Required, will not be published)