Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
28-05-2020, Saat: 21:35
(Son Düzenleme: 10-01-2021, Saat: 14:46, Düzenleyen: tabikisura10.
Sebep: Güncelleme
)
Merhaba.
C++ builder windows için uygulama geliştiriyorum.
bir kaç gün önce fmx liste sorunları için konu açmiştim. https://www.delphican.com/showthread.php?tid=4853
@ mrmarman teşekkür ederim yardımcı oldu.
yanlız fark ettim. VCL kullandığım zaman aynı kodlar ile 200 tane checbox oluşturuyorum max 5mb kadar ram yiyor.
ama FMX eklediğim zaman 50mb+ yiyor ve bu değer sil ekle yaptıkca artıyor. 15mb kullanırken birden 50mb gibi seviyelere cıkıyor.
temalı temasız denedim VCL göre yinede çok fazla ram yiyor. denemek için 200 tane ekledim. daha cok fazla component ekleyince daha artacaktır.
acaba ben mi bir şeyi yanlış yapıyorum sizde durum böylemi.
teşekkür ederim.
--
Konuyu tekrar güncelleyeceğim, verdiğim rahatsızlıktan dolayı özür dilerim.
Gecen günlerde sadece componentler daha zengin olmasından dolayı fmx gecis yapmak istedim.
daha sonra başlangıçta vcl göre daha fazla ram tükettiğini fark ettim. miktar 20mb falan olunca umursamadım.
Ama en ufak bir şey yaptığımda ram kullanımı inanılmaz derecede yükseliyor. Bende vcl devam etmek zorunda kaldım.
şimdi ise fmx kullanmak zorunda olduğumu fark ettim. çok uğraştım ama vcl artık karşılayamıyor.
geçmişe dönük XE 2010 2007 versiyonları indirip denedim ama vcl kullanamam bende tekrar 10.4.1 ile denemeler yaptım ama malesef çok aşırı ram tüketiyor.
denemek için yaptığım şey. iki memo ekledim ve bunları yazdım. Ram kullanımı 50 mb dayandı. (C++ Builder) Delphide durum nedir bilmiyorum
for (int i = 0; i < 10000; i++) {
Memo1->Lines->Add(i);
Memo2->Lines->Add(i);
}
bundan sonra ramrush programı çalıştırdım ram kullanımı 0,3 gibi değerlere düştü.
Halen sanki bir şey var ama ben bilmiyorum gibi geliyor bana.
sizde durum böyle mi acaba ram kullanımı sizin projelerde böyle yüksek mi. bunu rağmen nasıl kullanıyorsunuz gerçekten çok merak ediyorum.
artık ya bu sorunu çözmek zorumdayım yada rad studio değiştirmek zorundayım. pişmanım ram studio ile bunca zaman devam ettiğimdem dolayı. hep zorlama devam ettim hatalarını eksiklerini rağmen ama bu konu göz ardı edilemez durumunda.
farklı ide ile denedim. başlangıç 20mb olan ram çok fazla component eklesem bile 20,1 gibi rakamlara cıkıyor gayet normal. tabi projemi fmx geçirmek cok daha kısa sürecektir.
Lütfen benim bilmediğim bir şey varsa yardımcı olursanız sevinirim.
İyi çalışmalar.
Yorumları: 542
Konuları: 3
Kayıt Tarihi: 17-11-2016
Rep Puanı: 979 Acemi
bence Ram meselesi takılıcak bir konu değil, birisi direk çalışıyor, değeri arda fmx kullanarak çalıştırıyor. yüklü işlem yapmayacak bir yazılımsa ve mobil dede çalışacak sa FMX kullanmak gerekiyor. ben yeni projelerde VCL yi bıraktım.
Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
bizim proje genelde multi çalışması gerekiyor.
bir kullanıcı gerekirse 100 tane acacak durum böyle olunca büyük problem çıkartıyor.
Yorumları: 915
Konuları: 58
Kayıt Tarihi: 20-03-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.3
- Delphi 10.2
- Delphi 7
- Lazarus / FPC
Rep Puanı: 2.474 Programcı
ister VCL ister FMX proje olsun mutlaka exe oluştuktan sonra sıkıştırmayı deneyin. bu konuda mpress kullanıyorum. 25mblık VCL projem 5mb'a, 65mb lık FMX projem 4mb a kadar düşüyor.
http://www.matcode.com/mpress.htm
kullanımı da çok kolay.. Exe'nizi mpress dosyasının üstüne sürükleyin bırakın.
// Bilgi paylaştıkça çoğalır..
Yorumları: 4.225
Konuları: 379
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 16.801 Üstad
28-05-2020, Saat: 22:03
(Son Düzenleme: 28-05-2020, Saat: 22:05, Düzenleyen: TescilsizUzman.)
(28-05-2020, Saat: 21:35)tabikisura10 Adlı Kullanıcıdan Alıntı: Merhaba.
C++ builder windows için uygulama geliştiriyorum.
bir kaç gün önce fmx liste sorunları için konu açmiştim. https://www.delphican.com/showthread.php?tid=4853
@mrmarman teşekkür ederim yardımcı oldu.
yanlız fark ettim. VCL kullandığım zaman aynı kodlar ile 200 tane checbox oluşturuyorum max 5mb kadar ram yiyor.
ama FMX eklediğim zaman 50mb+ yiyor ve bu değer sil ekle yaptıkca artıyor. 15mb kullanırken birden 50mb gibi seviyelere cıkıyor.
temalı temasız denedim VCL göre yinede çok fazla ram yiyor. denemek için 200 tane ekledim. daha cok fazla component ekleyince daha artacaktır.
acaba ben mi bir şeyi yanlış yapıyorum sizde durum böylemi.
teşekkür ederim.
Tahminimce çalışma anında GPU kullandığı için olabilir.
Fakat image ve benzeri bileşenler olmadığı sürece belirttiğiniz miktara ulaşması oldukça güç.
Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
(28-05-2020, Saat: 22:01)mcuyan Adlı Kullanıcıdan Alıntı: ister VCL ister FMX proje olsun mutlaka exe oluştuktan sonra sıkıştırmayı deneyin. bu konuda mpress kullanıyorum. 25mblık VCL projem 5mb'a, 65mb lık FMX projem 4mb a kadar düşüyor.
http://www.matcode.com/mpress.htm
kullanımı da çok kolay.. Exe'nizi mpress dosyasının üstüne sürükleyin bırakın.
teşekkür ederim.
projenin 25 30 mb olması problem değil. çalıştıgında kullandığı ram miktarı çok fazla.
Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
konuya ekleme yaptım verdiğim rahatsızlıktan dolayı özür dilerim
Yorumları: 534
Konuları: 32
Kayıt Tarihi: 11-11-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 2.534 Uzman
10-01-2021, Saat: 15:37
(Son Düzenleme: 10-01-2021, Saat: 15:49, Düzenleyen: hi_selamlar.)
(28-05-2020, Saat: 22:01)mcuyan Adlı Kullanıcıdan Alıntı: ister VCL ister FMX proje olsun mutlaka exe oluştuktan sonra sıkıştırmayı deneyin. bu konuda mpress kullanıyorum. 25mblık VCL projem 5mb'a, 65mb lık FMX projem 4mb a kadar düşüyor.
http://www.matcode.com/mpress.htm
kullanımı da çok kolay.. Exe'nizi mpress dosyasının üstüne sürükleyin bırakın.
Merhabalar,
Exe boyutunu küçültmek sadece dağıtım amacında ve kod güvenliği için (belli bir ölçüye kadar) çözüm üretebilir.
Sıkıştırılmış exe de (Upx, Mpress vb.) çalışaya başlayınca hafıza da kendini açarak işlem yapmaya devam ediyor.
Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Yorumları: 1.114
Konuları: 17
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 14.323 Üstad
* RAM ölçümü konusunda şöyle bir karşılaştırma sunayım.
Sadece Process'in kapladığı alanı ölçümlüyoruz.
Şimdi de EXEPack edilip imzlanmış EXE'lerin karşılaştırılması.. Sanılan gibi fark göremeyeceksiniz.
Sonuç olarak : Windows hafıza yöntimi sizin process ile birlikte EXEPack extract edilen alan kadar yeri ayırmak zorunda. Onun için büyük rakamlar görüyorsunuz.
Konumuz Delphi değil ama sadece kodların ortak olduğunu göstermek için paylaşayım...
VCL Sample
Uses WinApi.psAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
cBizim : Cardinal;
begin
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label2.Caption := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
Memo1.Lines.BeginUpdate;
Memo2.Lines.BeginUpdate;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
for i := 0 to 9999 do begin
Memo1.Lines.Add(i.ToString);
Memo2.Lines.Add(i.ToString);
end;
Memo1.Lines.EndUpdate;
Memo2.Lines.EndUpdate;
cBizim := CurrentProcessMemory;
Label4.Caption := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label6.Caption := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
end;
function TForm1.CurrentProcessMemory: Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
Result := 0;
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess,
@MemCounters,
SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize
else
RaiseLastOSError;
end;
procedure TForm1.TrimAppMemorySize;
var
MainHandle : THandle;
begin
try
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
CloseHandle(MainHandle) ;
except
end;
Application.ProcessMessages;
end;
FMX Sample
Uses WinApi.Windows, WinApi.psAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
cBizim : Cardinal;
begin
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label2.Text := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
Memo1.Lines.BeginUpdate;
Memo2.Lines.BeginUpdate;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
for i := 0 to 9999 do begin
Memo1.Lines.Add(i.ToString);
Memo2.Lines.Add(i.ToString);
end;
Memo1.Lines.EndUpdate;
Memo2.Lines.EndUpdate;
cBizim := CurrentProcessMemory;
Label4.Text := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label6.Text := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
end;
function TForm1.CurrentProcessMemory: Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
Result := 0;
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess,
@MemCounters,
SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize
else
RaiseLastOSError;
end;
procedure TForm1.TrimAppMemorySize;
var
MainHandle : THandle;
begin
try
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
CloseHandle(MainHandle) ;
except
end;
Application.ProcessMessages;
end;
Saygılarımla
Muharrem ARMAN
Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
10-01-2021, Saat: 16:57
(Son Düzenleme: 10-01-2021, Saat: 17:12, Düzenleyen: tabikisura10.)
(10-01-2021, Saat: 16:26)mrmarman Adlı Kullanıcıdan Alıntı: * RAM ölçümü konusunda şöyle bir karşılaştırma sunayım.
Sadece Process'in kapladığı alanı ölçümlüyoruz.
Şimdi de EXEPack edilip imzlanmış EXE'lerin karşılaştırılması.. Sanılan gibi fark göremeyeceksiniz.
Sonuç olarak : Windows hafıza yöntimi sizin process ile birlikte EXEPack extract edilen alan kadar yeri ayırmak zorunda. Onun için büyük rakamlar görüyorsunuz.
Konumuz Delphi değil ama sadece kodların ortak olduğunu göstermek için paylaşayım...
VCL Sample
Uses WinApi.psAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
cBizim : Cardinal;
begin
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label2.Caption := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
Memo1.Lines.BeginUpdate;
Memo2.Lines.BeginUpdate;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
for i := 0 to 9999 do begin
Memo1.Lines.Add(i.ToString);
Memo2.Lines.Add(i.ToString);
end;
Memo1.Lines.EndUpdate;
Memo2.Lines.EndUpdate;
cBizim := CurrentProcessMemory;
Label4.Caption := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label6.Caption := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
end;
function TForm1.CurrentProcessMemory: Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
Result := 0;
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess,
@MemCounters,
SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize
else
RaiseLastOSError;
end;
procedure TForm1.TrimAppMemorySize;
var
MainHandle : THandle;
begin
try
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
CloseHandle(MainHandle) ;
except
end;
Application.ProcessMessages;
end;
FMX Sample
Uses WinApi.Windows, WinApi.psAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
cBizim : Cardinal;
begin
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label2.Text := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
Memo1.Lines.BeginUpdate;
Memo2.Lines.BeginUpdate;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
for i := 0 to 9999 do begin
Memo1.Lines.Add(i.ToString);
Memo2.Lines.Add(i.ToString);
end;
Memo1.Lines.EndUpdate;
Memo2.Lines.EndUpdate;
cBizim := CurrentProcessMemory;
Label4.Text := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
TrimAppMemorySize;
cBizim := CurrentProcessMemory;
Label6.Text := Format('Memory = %s', [ FormatFloat( '#,###0', cBizim) ]);
Application.ProcessMessages;
end;
function TForm1.CurrentProcessMemory: Cardinal;
var
MemCounters: TProcessMemoryCounters;
begin
Result := 0;
MemCounters.cb := SizeOf(MemCounters);
if GetProcessMemoryInfo(GetCurrentProcess,
@MemCounters,
SizeOf(MemCounters)) then
Result := MemCounters.WorkingSetSize
else
RaiseLastOSError;
end;
procedure TForm1.TrimAppMemorySize;
var
MainHandle : THandle;
begin
try
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
CloseHandle(MainHandle) ;
except
end;
Application.ProcessMessages;
end;
Hocam yine çok fazla zahmet verdim size.
sadece BeginUpdate() ve EndUpdate() eklemeden önce 30mb+ artıyorken. bunları ekledim 2mb falan artma oldu.
çok teşekkür ederim hocam tekrar. cahillik işte hiç umursamamıştım onları daha öncede eklemiştiniz siz. saolun hocam hayatımı kurtardınız.
SetProcessWorkingSetSize ile birlikte 3mb kadar düştü hocam. gerçek manada hayatımı kurtardınız hocam inanın
|