Exe Dosyalar Başka Sistemde Çalışmıyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Opt2000 yazdı:Burada anlatacaklarım, aslında kesin bilgilere değil, bildiklerimden çıkardıklarım üzerine olacak. Bu yüzden yazdıklarımı kesin doğru olarak düşünmeyin, hatta yanlışım varsa düzeltirseniz sevinirim :)
Bende bu konuda bir otorite olduğumu idda etmiyorum, Sistem Programlama ve Bellek Yönetimine çok fazla ilgim olmasına rağmen daha yeni yeni ilgilenme fırsatı buluyorum :shock:

Opt2000 yazdı: Windows, normalde uygulamaları çalıştırırken, her uygulama için sanal bir bilgisayar oluşturuyor.
Daha doğrusu, her program için ayrı bir bellek alanı açıyor ve siz bu bellek alanı içinde çalışıyorsunuz.
Dolayısıyla programınız çöktüğü zaman genelde sistem diğer programların çökmesini engelleyebiliyor.
Ama ortak kullanım anlamına gelen BPL ve DLL'ler, sizin programınızla aynı bellek alanına yüklenemez.
Aksi takdirde zaten DLL, BPL mantığını kaybedersiniz, çünkü aynı DLL'i kullanan programlar, DLL'leri iki kere yüklemek zorunda kalır.
Sonuçta A programı, B programının bellek alanına erişemez, çünkü buna işletim sistemi izin vermez.
Sanırım buraya kadar olan kısımda her DLL için işletim sisteminin farklı bir bellek alanı yaratacağını açıklayabilmiş oluyorum.

İşte işletim sisteminin kontrolleri derken anlatmak istediğim de burasıydı.
Sizin programınız, aslında kendisine ait olmayan bir adrese ulaşmaya çalışıyor.
Burada işletim sistemi devreye giriyor ve sizin kullanmak istediğiniz adresin geçerliliğini kontrol ediyor.
Elbette sistemin buna yönetlik optimizasyonları vardır, ama kendi kodunuz çalışırken bu kontrol yapılmıyor, çünkü bu kontroller zaten compile edilirken hallediliyor.

Aynı zamanda şunu da eklemek gerekiyor, Delphi'de bir DLL yarattığınızda kocaman bir uyarı commenti görüyorsunuz:
Eğer string tipi veri aktarımı yapacaksanız, Borlndmm.dll (adını tam hatırlamıyorum) gibi bir dosyayı da dağıtmanız gerekir.
Diğer bir değişle, araya Borland'ın çevirimleri falan giriyor, büyük ihtimalle Delphi String'i Null terminated String'lere çevirerek uyumluluğu sağlıyor.
Yani sizin yazdığınız kod, aslında sizin yazdığınız gibi çalışmıyor, ama aynı işi yapıyor :) (Bu mesajlarda sürekli garip cümleler kuruyorum, kusuruma bakmayın)
Yukarıdaki söylediklerinizden çıkardığım ve ekleyebileceklerim şunlar;
Compiler bir Exe yi derlerken Linkleme Yapıyor (Linker yada Linking gibi bişeydi :roll: ). Yani Exe ile birlikte, Exe nin ilişkisinin olduğu Dll, bpl ve Hatta daha derine gidersek fonksiyon ve sabiteri ilişkilendiriyor
ve Exe çalıştığında Exe ile birlikte toplu olarak belleğe yükleniyorlar. Bu durumda muhtemelen @Opt2000 in bahsettiği gibi kendilerine ait bir bellek alanı oluyor ve bunun dışına çıkamıyorlar. (Stack hariç tabi)
Şimdi bu yazdıklarımdan yola çıktığımda, Aynı exe yada aynı dll ve bpl leri kullanan başka bir exe çalıştırıldığında dll ve bpl ler belleğe tekrar yüklenir diyebilirim.
Her Exe kendi bölümündeki bpl ve dll lere ulaşır. Hatta ve hatta muhtemelen işletim sistemi Caching sistemini kullanıyordur ve bu nedenle exe ve modullerinin (bpl, dll vs) belli kısımlarını yükleyebilir.

Şimdi bütün bu yazılanlardan sonra geri baktığımda hala modüllerin neden exe leri yavaşlattığını anlamış değilim ki yavaşlatmadığını idda ediyorum. :lol:
Çünkü bir önceki mesajımda da belirttiğim gibi modüller belleğe yüklendikten sonra, (belleğe yüklenmiş olan) exe onları bellekten kullanıyor.. (Amma çok bellek kelimesi kullandım :shock: )
Bellekte exe üzeinde fazla yer kapladıklarını kabul ediyorum ama zaten günümüz sistemlerindeki belleklerim büyük olduğundan
ve işletim sistemlerinin bellek yönetimlerinin iyi olduğundan dolayı kafaya takacak bir husus olduğunu düşünmüyorum. :lol:

Bu arada bende @Opt2000 gibi söylediklerimin doğruluğundan %100 emin değilim. Ama hala devam eden sistem programlama eğitiminde öğrendiklerimden bunları çıkardım. Bir yanlışım varsa ve düzeltilirse sevinirim
DeveloperToolKit

..::|YeşilMavi|::..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

lazio yazdı: Şimdi bu yazdıklarımdan yola çıktığımda, Aynı exe yada aynı dll ve bpl leri kullanan başka bir exe çalıştırıldığında dll ve bpl ler belleğe tekrar yüklenir diyebilirim.
Hayır DLL ler böyle çalışmaz. 2 Application da KERNEL.DLL'den bir method kullanabilir. Fakat KERNEL.DLL belleğe 1 kere yüklenir. Her uygulama için bellekte bir kopyası oluşmaz. Kod bölümü bellekte 2 uygulama arasında paylaşılır ve aynı code segment'te işletilir.

DLL her iki uygulama için aynı kod segment'te demiştik. Peki o halde register ve variable değerleri her iki uygulamada da aynı olmaz mıydı? Hayır. DLL uygulamaların stack segmentini kullanır. Register değerlerini ve variable'ları kendisini çağıran uygulamaların stack segmentinde saklar. Bu sayede karışma yaşanmaz.

Ben de DLL kullanıldığında uygulamanın yavaşlayacağını zannetmiyorum. Olsa olsa DLL'in ilk yüklendiği anda bir miktar CPU kaybedilir. Daha sonra çağrılar bildiğimiz FAR CALL üzerinden yapılır. Eğr DLL kullanılmasaydı Borland derleyicisi de içsel olarak bu proc lara CALL yapacaktı. Dolayısıyla çağırma işleminde bir fark bulunmamakta.
Her Exe kendi bölümündeki bpl ve dll lere ulaşır. Hatta ve hatta muhtemelen işletim sistemi Caching sistemini kullanıyordur ve bu nedenle exe ve modullerinin (bpl, dll vs) belli kısımlarını yükleyebilir.
DLL'in belirli bir kısmını yüklemek mümkün değil. Belleğe tamamen yüklenir.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

saol coderlord, doğrusu dll lerin bu şekilde çalıştığını bilmiyordum..
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
skyking
Üye
Mesajlar: 136
Kayıt: 09 Kas 2005 12:52
Konum: Antalya

Mesaj gönderen skyking »

slm

sana bir program öneriyim
exeyi exe olarak küçülten bir program var ASPACK

%75 oranında kucultuyor...

ben bunu kulanıyorum..


7 mb exe 2 mb exe dusuyor ve her windows platformunda calısıyor...

ve bunu ftp atıp ordan program guncellestirmesi yapıyorum
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Sıkıştırdığında programının da neredeyse 2 kat bellek harcadığını da gördün mü peki? :D
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

coderlord yazdı:Sıkıştırdığında programının da neredeyse 2 kat bellek harcadığını da gördün mü peki? :D
bana oğuz yılmaz ın bi şarkısını hatırlattı...
gördünmüüüü gördünmüüüü
diyodu...
:lol: :lol: :lol: :lol:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

arkadaşlar Delphi 7 kullanıyorum vt firebird 1.5 yukarıdaki kısımda söylenilenleri uyguladım fakat kullandığım bilgisayarda çalışan programı networkteki diğer bilgisayardan açmaya çalıştığımda hiç açılmıyor.
Project1 açılamıyor ve kapatılması gerekiyor diye hata veriyor.

Yaptığım işlemler

İbdatabasename 192.160.20.70:\network.fdb
ibtransaction -> ibdatabase1
ibdataset -> ibdatabase1
selectsql ->select * from DENEME

ModifySQL
---------------------
update DENEME
set
MAHALLEADI = :MAHALLEADI,
SOKAKADI = :SOKAKADI,
ISINTARIHI = :ISINTARIHI,
FAALIYETGRUBU = :FAALIYETGRUBU
where
MAHALLEADI = :OLD_MAHALLEADI and
SOKAKADI = :OLD_SOKAKADI and
ISINTARIHI = :OLD_ISINTARIHI
---------------------------------------------------

Bilgisayarımdaki güvenlik duvarını kapadım.
Build with runtime packages işaretli değil. Kendi Bilgisayarımda çalışıyor.
Herkese kolay gelsin iyi çalışmalar
Fikren emir almazsan, esir olursun ikisinin ortası yoktur.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
programı derlemeden önce databaselerin bağlantısını kes.
açık tablo varsa kapat. öyle derle.

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
heskin35
Üye
Mesajlar: 132
Kayıt: 30 Haz 2004 09:48

Mesaj gönderen heskin35 »

idalan yazdı:192.160.20.70:\network.fdb
Burada path'i tam yol olarak girmemen ile alakalı olabilir belki.
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

database component editörde
------------------------------
remote işaretli
server ->192.160.20.70
protocol->TCP
database->c:\networks\network.fdb
-----------------------------------------

vt olarak Access ve Ado ile bi deneme yaptım çalışıyor diğer bilgisayarda
ibdatabase, transaction,dataset hepsini false yaptım
form create olurken bunları true yaptım yine olmadı
Fikren emir almazsan, esir olursun ikisinin ortası yoktur.
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

ilk önce aldığın hata mesajını tam olarak yazarsan varsayımda bulunmak zorunda kalmayız. Client makinada firebird yüklü mü? ana makinanın güvenlik duvarında tcp 3050 portu açık mı?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Database bileşeninin Connected derlenmesi bazen program çalışırken kırılmalara sebep oluyor :!: En garantisi GExpert yüklenip, GExpert menüsü / Configuration.. dan (en alttan üçüncü) Set Component Properties işaretlenip, Configure kısmından öncelikle TDatabase, TIBDatabase, TpFIBDatabase bileşenleri ve diğer ilgili bileşenler seçilip Connected veya Active özellikleri False olarak listeye eklenir. Bundan sonra ise GExpert her derleme öncesi bu bileşenleri kapatır :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
idalan
Üye
Mesajlar: 58
Kayıt: 25 Şub 2004 02:14
Konum: Üsküdar
İletişim:

Mesaj gönderen idalan »

evet çalıştı çok teşekkürler...
herkese kolay gelsin arkadaşlar
Fikren emir almazsan, esir olursun ikisinin ortası yoktur.
Kullanıcı avatarı
DarkEternal
Üye
Mesajlar: 158
Kayıt: 19 Eki 2005 11:00

Mesaj gönderen DarkEternal »

Aynı sorunu bende yaşıyorum,heryerde çalışan .exe dosyam bir bilgisayarda çalışmıyor.
Bilgisayarın özellikleri: Win Xp Home E. SP1
Burdaki yazılan yöntemleri de denememe rağmen çalışmadı.
Çalıştırıldıında mouse kısa bir süre Kum saati oluyor fakat hiç bir işlem gerçekleşmiyor ayrıca hata fln da vermiyor...
Cevapla