واضح آرشیو وب فارسی:سایت ریسک: CPUSatan16-02-2010, 04:21 PMاز یه کامپوننتی تو برنامم استفاده کردم که هروقت فایلی رو باز می کنه بعد از باز کردن یه فایل جدید، حافظه ای رو که فایل قبلی اشغال کرده بود آزاد نمی کنه، بعد از چند بار فایل باز کردن با مشکل Memor Leak با خطلای Out Of System Resources مواجه می شه. حتی کامپوننت رو هم Free می کنم باز هم اون فضا آزاد نمی شه. برای حل این مشکل کسی می تونه کمکم کنه؟ چجوری می تونم حافظه اشغال شده رو آزاد کنم؟ بچه ها مشکلم خیلی جدی، برنامه رو فروختم ولی با وجود این مشکل کار نمی کنه. اینترنت رو هم خوردم ولی چیزی که بدردم بخوره نتونستم پیدا کنم. مرسی CPUSatan17-02-2010, 09:06 PMکسی کمکی از دستش بر نمیاد؟ romixery18-02-2010, 10:39 AMدقيقاً از چه كامپوننتي استفاده كردين؟ Exception رو جهت كنترل خطا امتحان كردين يا نه؟ CPUSatan18-02-2010, 03:14 PMکامپوننت برای CAD هستش، کنترل خطا توش به کار بردم. مشکل من کنترل خطا نیست، مشکل حافظه ای هستش که می گیره و نمی داره ادامه برنامه انجام بشه. اون حافظه رو باید چجوری خالی کنم؟؟؟ romixery18-02-2010, 09:07 PMعجيبه. آخرش هم نام دقيق كامپوننت رو نگفتين. چرا؟ آيا از كامپوننتهاي CADxp ساخت شركت Crystal Componentاستفاده ميكنيد؟ 1- اينترنت رو براي اشكالي مشابه جستجو كنيد، احتمال بسيار زياد بايد براي بقيه هم اتفاق افتاده باشه. در غير اينصورت كدي كه نوشتين مشكل داره. شك نكنيد. 2- آيا آخرين نسخه كامپوننت رو دانلود كردين و استفاده مي كنيد؟ 3- آيا به سورس كامپوننت دسترسي دارين يا كامپوننت رو با فايلهاي DCU فقط دارين؟ CPUSatan19-02-2010, 12:23 AMکامپوننت PowerCAD هستش آخرین ورژنش هست اینترنت هم گشتم از کد خودم مطمئنم و میدونم باگ این کامپوننت هستش، وقتی فایلی رو باز می کنه تا موقع بسته شدن برنامه که خود سیستم عامل حافظه رو خال کنه خودش خافظه رو خالی نمی کنه. ---------- Post added at 01:23 AM ---------- Previous post was at 01:22 AM ---------- روشی هست که دستی بتونم حافظه رو خالی کنم؟؟ F A R H A D19-02-2010, 06:26 PMسلام روشی هست که دستی بتونم حافظه رو خالی کنم؟؟ بله. برنامه ای که شما نوشتید بعد از اتمام leak memory به جا میزاره. شما در یک بلوک try..finally فضای اختصاص داده شده به متغیرها رو پس بگیرید. در صورتی که باز هم نتیجه نگرفتید لینک زیر رو ببینید: http://www.delphi3000.com/articles/article_4101.asp?SK= اگر اطلاعات بیشتری خواستید هم garbage collector رو برای دلفی جستجو کنید. شاد باشید CPUSatan20-02-2010, 01:35 PMفرهاد جان، این مقاله رو قبلا دیده بودم. توش فقط در مورد کنترل حافظه توضیح داده شده، من دنبال دستوری برای خالی کردن حافظه هستم نه بلاک ها. من دارم از بلاک ها استفاده می کنم تو برنامم. ولی وقتی یه کامپوننت حافظه رو می گیره، خودش هم باید آزادش کنه، حالا که خودش آزاد نمی کنه من باید یه جوری حافظه رو خالی کنم، یا بفهمم چه آدرس هایی از حافظه رو گرفته و من اونها رو خالی کنم، در غیر این صورت کل حافظه رو خالی کنم که این روش دوم روش زیاد سالمی نیست، ولی خوب مجبورم! امیدوارم متوجه منظورم شده باشی، چون فکر می کنم تو مطلب های قبلی درست متوجه منظورم نشدی. مرسی از کمک هات romixery20-02-2010, 07:52 PMgarbage collector رو برای دلفی جستجو کنید البته بايد بگم كه دلفي، چيزي به صورت garbrage collector رو به اون صورت كه شما فكر مي كنيد نداره. garbrage collector بيشتر در زبانهايي كه Visual Machine دارن پياده سازي شده مثل جاوا. چون سيستم عامل اون فضا رو به طور مستقيم نمي گيره. ولي كلاً به فرايند، آزاد سازي فضا، علامت زدن فضا به عنوان حافظه قابل دسترس سيستم عامل و بازگشت اون به سيستم عامل نيز garbrage collection مي گن. CPUSatan عزيز، مي تونيد به من بگين شما بر چه اساسي مي گين وقتي حتي شئ رو Destroy مي كنيد، حافظه اي خالي نميشه؟ مي خوام ببينم شما مطمئنيد كه حافظه خالي نميشه؟ بزارين مسئله رو يه بار ديگه مرور كنيم. 1- كامپوننت شما بعد از لود چند فايل «احتمالاً پشت سر هم» با خطاي Out of system resources رخ ميده. 2- بعد از فراخواني متد Free و يا Destroy ، حافظه خالي نميشه 3- به سورس كامپوننت دسترسي ندارين. خوب اينجا چند تا سؤال برام پيش مياد. 1- هر فايل چقدر فضا از كامپيوتر شما مي گيره. دقيقاً ذكر كنيد كه بعد از فراخواني چند مگابايت فايل، چند مگابايت از فضاي Ram شما پر ميشه؟ 2- كل فضاي Ram شما چقدر هست؟ يك پيشنهاد: براي امتحان بياين و كل فرمتون كه توي اون، كامپوننتي كه فايلها رو لود مي كنه، رو Destroy كنيد. ببينيد فضايي خالي ميشه يا نه. شايد اين كامپوننت وابسته به Parent خودش باشه. نمي دونم، ولي به نظر من مرور دوباره مسئله، با داشته ها و نداشته ها، مي تونه به حل مسئله بيشتر كمك كنه. F A R H A D20-02-2010, 09:55 PMتوش فقط در مورد کنترل حافظه توضیح داده شده بیشتر بررسی کنید. مخصوصا مورد 2 و 3. همچنین اگر تونستید ابزار MemProof رو تهیه کنید. برای مشاهده ی پردازش ها مفید هست وقتی یه کامپوننت حافظه رو می گیره، خودش هم باید آزادش کنه، حالا که خودش آزاد نمی کنه من باید یه جوری حافظه رو خالی کنم اگر سورس دارید باید متد های destructor رو ببینید و کنترل کنید که آیا به درستی عمل میکنند یا خیر. چيزي به صورت garbrage collector رو به اون صورت كه شما فكر مي كنيد نداره به چه صورتی فکر میکنیم!؟ مگه من گفتم که garbage collector داره؟ garbage collector یا GC یکی از امکانات .net frameWork هست، پس در دلفی 7 وجود نداره در google عبارت delphi garb.... رو که بنویسید، delphi garbage collector و delphi garbage collection رو خواهید دید و در نتیجه کد های زیادی برای پیاده سازی garbage collector در دلفی خواهید یافت. CPUSatan21-02-2010, 01:34 PMمي تونيد به من بگين شما بر چه اساسي مي گين وقتي حتي شئ رو Destroy مي كنيد، حافظه اي خالي نميشه؟ مي خوام ببينم شما مطمئنيد كه حافظه خالي نميشه؟ من این قضیه رو توی TaskManager چک می کنم، و می بینم تا وقتی که کل برنامه بسته نشه و خود سیستم عامل منابع داده شده رو پس نگیره، خالی نمی شن. هر فايل چقدر فضا از كامپيوتر شما مي گيره. دقيقاً ذكر كنيد كه بعد از فراخواني چند مگابايت فايل، چند مگابايت از فضاي Ram شما پر ميشه؟ بستگی به فایلی که باز می کنه داره، مقدار ثابتی نیستش. كل فضاي Ram شما چقدر هست؟ 4 گیگ رم رو دستگاه منه. براي امتحان بياين و كل فرمتون كه توي اون، كامپوننتي كه فايلها رو لود مي كنه، رو Destroy كنيد. ببينيد فضايي خالي ميشه يا نه. شايد اين كامپوننت وابسته به Parent خودش باشه. این کار رو هم کردم ولی جواب نگرفتم، تو زمان اجرا یه فرم ساختم، کامپ.ننت رو هم توش ساختم، فایل رو باز کردم، فایل رو بستم، کامپوننت و فرم رو آزاد کردم ولی مشکل باز هم تا موقع خروج کامل برنامه وجود داشت. مخصوصا مورد 2 و 3. همچنین اگر تونستید ابزار MemProof رو تهیه کنید. برای مشاهده ی پردازش ها مفید هست این ابزار و چند تا ابزار مشابه رو تهیه کردم، واقعا چیزهای خوبی بودن، ولی تو این مشکل به من کمک خاصی نکردند اگر سورس دارید باید متد های destructor رو ببینید و کنترل کنید که آیا به درستی عمل میکنند یا خیر. نه سورسش رو ندارم. در ضمن من حتی StackSize رو هم تا جای ممکن افزایش دادم که منابع بیشتری از سیستم عامل درخواست کنه. romixery22-02-2010, 09:38 AMواقعاً كه عجيبه. 4 گيگ حافظه كمي نيست كه بخواد با باز كردن چند تا فايل پر بشه. فكر نمي كنم كه بشه كار زيادي انجام داد. اينجوري كه شما مي گين، اكثر راهها رو امتحان كردين. اين صفحه رو خوندين؟: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!اينطور كه من تحقيق كردم، دليل اصلي اينكه متد free حافظه اي رو خالي نمي كنه، عدم نبستن فايل بوسيله كامپوننت هست. وقتي شما فايل رو باز مي كنيد، تا وقتي كه اون رو نبندين، متد free نمي تونه حافظش رو آزاد كنه. آيا امكانش هست كه كامپوننت رو عوض كنيد. چيزي كه من پيدا كردم كامپوننت TCad هست كه به نظر كامپوننت خوبي مياد و از تكنولوژي net. بهره ميبره. البته به صورت عملي ازش استفاد نكردم. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!!اين صفحه اصلي سازنده هست. ببينيد اگه بدردتون ميخوره من براتون نسخه Full رو گير بيارم. مگه من گفتم که garbage collector داره؟ garbage collector یا GC یکی از...فرهاد جان چرا اينقدر ناراحت ميشين. من كه منظوري نداشتم. من كه در مورد garbage collection توضيح دادم. ببخشيد اگه منظورم رو خوب نرسوندم يا بهتر بگم، منظورتون رو متوجه نشدم. در 3 تكنولوژي دنيا، فعلاً garbage collector پياده سازي شده. Net. و Java و Python. و دلفي از اين ماشين بي بهره است. به خاطر اينكه Cross Platform نيست. و موتور واسط مياني نداره. CPUSatan22-02-2010, 12:09 PMواقعاً كه عجيبه. 4 گيگ حافظه كمي نيست كه بخواد با باز كردن چند تا فايل پر بشه هر چقدر رم رو دستگاه باشه فرقی نمی کنه، مهم اینه که هر برنامه ای هروقت اجرا می شه مقداری از منابعی مثل رم و غیره از سیستم عامل درخواست می کنه و سیستک عامل مقدار محدود و مشخصی بهش می ده، وقتی مقدار نیاز از مقدار تخصیص داده شده بیشتر بشه، با مشکلی که الان باهاش مواجهم روبرو می شیم. اين صفحه رو خوندين؟ آره این صفحه رو هم خوندم، این هم باز همون بحث بلاک هاست و توی مسئله ما چیزی رو عوض نمی کنه. اينطور كه من تحقيق كردم، دليل اصلي اينكه متد free حافظه اي رو خالي نمي كنه، عدم نبستن فايل بوسيله كامپوننت هست. وقتي شما فايل رو باز مي كنيد، تا وقتي كه اون رو نبندين، متد free نمي تونه حافظش رو آزاد كنه. تحقیقاتت تقریبا درسته و مشکل ما هم با این کامپوننت همینه، که فایل هایی رو که باز می کنه نمی بنده. این ها باید از همون بلاک هایی که برام آدرس توضیحشون رو می ذاری استفاده می کردند و برای متد Destructor رو به صورت Override; تعریف می کردند که نکردند!! آيا امكانش هست كه كامپوننت رو عوض كنيد. چيزي كه من پيدا كردم كامپوننت TCad هست این کامپوننت رو با نسخه ی آزمایشی کار کرده بودم، یه سری برتری هایی هم نسبت به PowerCAD داره، ولی من هم دیر بهش برخورد کرده بودم هم PowerCAD واقعا بعضی جاها قدرتمند کار می کنه. PowerCAD یه کامپوننت خیلی عالی هستش که به همون اندازه Bug داره، باگ هاش واقعا بیچارم کردن، این آخری هم که کمرمو دیگه شکوند. در ضمن اگر Full کامپوننت TCad رو داری ممنون می شم بذاری. Romixery عزیز واقعا ممنون. F A R H A D22-02-2010, 10:40 PMمن كه منظوري نداشتم. من كه در مورد garbage collection توضيح دادم. ببخشيد اگه منظورم رو خوب نرسوندم يا بهتر بگم، منظورتون رو متوجه نشدم من هم منظوری نداشتم romixery عزیز. گاهی اوقات صریح حرف میزنم، جدی نگیرید با توجه به بحث های مطرح شده من هم فکر میکنم بهترین کار استفاده از کامپوننتهای مشابه هست موفق باشید romixery23-02-2010, 10:33 AMسلام كامپوننت TCAD. زودتر دان كنيد تا لينكش نمرده. حجم: 4 مگابايت !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! كامپوننت TCAD xp.i Enterprise Full Source نسخه Enterprise حجم: 12 مگابايت دانلود: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! پسورد: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! Features: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! موفق باشين فلایت سازان02-10-2010, 10:25 AMسلام فایل ها از راپیدسر دانلود نمی شونند لطقا اگر ممکن است برایم بفرستید با تشکر [email protected] CPUSatan03-10-2010, 09:31 PMاگر ممکنه این کامپوننت رو دوباره بذارید.... سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 548]