PDA

View Full Version : Memory Leak



JalaliMehr
چهارشنبه 06 مرداد 1389, 17:18 عصر
اگر يا يك تابعي داشته باشيم كه يك Instance از كلاس رو ايجاد كرده و در خروجي تابع قرار ميده.
حال ما تو يك عبارت اين خروجي رو مستقيم مي فرستيم تو يك رويه ديگر .فرض كنيد اين كار بارها
تو برنامه انجام بشه Memory leak ايجاد ميكنه و اصولاً اين روش صيحيح يا نه بايستي در اين
موارد از اشاره گرها استفاده كنيد.
آيا Garbage Collector در اين ميان نقشي بازي ميكنه يا نه.
اگر روشي اصولي وجود داره لطفاً بيان كنيد.


type
TBigClass = Class
End;
implementation
function CreateBigClass : TBigClass;
begin
Result := TBigClass.Create;
end;
procedure GetBigClass(ABigClass : TBigClass);
begin

end;
procedure Consume;
var i : Integer;
begin
for i := 0 to MaxInt - 1 do
GetBigClass(CreateBigClass);

end;

SAASTN
چهارشنبه 06 مرداد 1389, 18:26 عصر
فرض كنيد اين كار بارها
تو برنامه انجام بشه Memory leak ايجاد ميكنه و اصولاً اين روش صيحيح يا نه بايستي در اين
موارد از اشاره گرها استفاده كنيد.
خوب اصلا نوشتن این برنامه به این صورت به چه دردی می خوره؟ شما یه سری نمونه سازی کردی و رو هوا ولشون کردی. اگه نیاز هست که جایی نگهداری بشن مثلا باید توی یه TList دسترسی بهشون رو حفظ کنی و اگر هم یه سری اشیائ مصرفین که درست بعد از اینکه کار باهاشون تموم شد باید آزاد بشن.

JalaliMehr
چهارشنبه 06 مرداد 1389, 19:46 عصر
خوب اصلا نوشتن این برنامه به این صورت به چه دردی می خوره؟ شما یه سری نمونه سازی کردی و رو هوا ولشون کردی. اگه نیاز هست که جایی نگهداری بشن مثلا باید توی یه TList دسترسی بهشون رو حفظ کنی و اگر هم یه سری اشیائ مصرفین که درست بعد از اینکه کار باهاشون تموم شد باید آزاد بشن.
به نظر پست شما بيشتر شبيه توضيح واضحات بود تا جواب من.
من حتماً نيازش دارم كه پرسيدم و گرنه سر درد نمي كنه.

SAASTN
چهارشنبه 06 مرداد 1389, 23:26 عصر
پست شما بيشتر شبيه توضيح واضحات بود
کاملا قبول دارم، و سوالم هم اینه که وقتی می تونیم با یه TList می تونیم دسترسی رو حفظ کنیم و جلوی نشت حافظه رو بگیریم چرا باید بریم سراغ Garbage Collector؟
من خیلی در مورد مدیریت حافظه دلفی در سطوح پائین نمی دونم ولی یه مثال به همین شکل پیاده کردم و حافظه نشت کرد که نشون میده Garbage Collector برای این وضعیت کاری نمی کنه.

JalaliMehr
پنج شنبه 07 مرداد 1389, 13:46 عصر
دوستان كسي با اين مسئله برخورد نكرده؟