PDA

View Full Version : سوال: علت افزایش حجم فایل exe من چیه؟؟



ghrzarei
دوشنبه 21 اردیبهشت 1388, 23:38 عصر
یک پروژه ای شروع کردم که به علت گستردگی و متنوع بودن به چندین بخش تقسیم کردم و هر بخش داخل کلاس های که در نهایت به شکل یک فایلdll در می یاد و به برنامه اصلی که شامل یک exe هست مرتبط می شود حال نمی دونم چرا با توجه به اینکه تا الان که 12 فایل dll با حجم بسیار کم را به برنامه ارتباط دادم(رفرنس بر قرار کردم) و خود برنامه اصلی که این ارتباط ها را در آن انجام دادم شامل سه فرم معمولی در حد گرفتن کد کاربر و... می باشد تا کنون حجمش به حدود 3MB رسیده در حالی که من قبلا پروژه ها بزرگتر با فایلهای dll بیشتر را با vb6 تهیه می کردم حجم فایل اصلی به 1MB هم نمی رسید فکر می کنید علت چه باشد اگر دوستان کمک کنند بسیار ممنون می شوم.

tdkhakpur
سه شنبه 22 اردیبهشت 1388, 00:05 صبح
سلام:
دلایل زیادی میتونه داشته باشه :
1 - اینکه شما هر هدری رو که ساخته اید روی پروژه exe تون هم ست میشه.
2 - اینکه شاید از متغییر های استفاده شده در هدرهای کمکی که برای کار برنامه های dll ساخته اید اندازه های زیادی دارند.
دوست عزیز شما برای غلبه بر افزایش حجم که این روزها شاید حجم فایل اجرائی هر چه بیشتر باشه بهتره - باید برنامه exe شما درگاهی برای گرفتن مسیر فایلهای dll در داخل همون برنامه exe داشته باشه تا با توجه به اون مسیر بتونه dll رو اجرا کنه بدون اینکه بصورت ثابت مسیر رو در داخل برنامه ات در نظر بگیرید.
این بهترین و با امن ترین روشی هست که من 10 سال هست دارم باهاش کار میکنم و خیلی از نظر زمان هم به صرفه هست.

ghrzarei
سه شنبه 22 اردیبهشت 1388, 06:38 صبح
سلام:
دلایل زیادی میتونه داشته باشه :
1 - اینکه شما هر هدری رو که ساخته اید روی پروژه exe تون هم ست میشه.
2 - اینکه شاید از متغییر های استفاده شده در هدرهای کمکی که برای کار برنامه های dll ساخته اید اندازه های زیادی دارند.
دوست عزیز شما برای غلبه بر افزایش حجم که این روزها شاید حجم فایل اجرائی هر چه بیشتر باشه بهتره - باید برنامه exe شما درگاهی برای گرفتن مسیر فایلهای dll در داخل همون برنامه exe داشته باشه تا با توجه به اون مسیر بتونه dll رو اجرا کنه بدون اینکه بصورت ثابت مسیر رو در داخل برنامه ات در نظر بگیرید.
این بهترین و با امن ترین روشی هست که من 10 سال هست دارم باهاش کار میکنم و خیلی از نظر زمان هم به صرفه هست.


با تشکر دوست عزیز از نکاتی که فرمودید لطفا می شه در مورد

(باید برنامه exe شما درگاهی برای گرفتن مسیر فایلهای dll در داخل همون برنامه exe داشته باشه تا با توجه به اون مسیر بتونه dll رو اجرا کنه بدون اینکه بصورت ثابت مسیر رو در داخل برنامه ات در نظر بگیرید. این بهترین و با امن ترین روشی هست که من 10 سال هست دارم باهاش کار میکنم و خیلی از نظر زمان هم به صرفه هست)

بیشتر توضیح بدین به چه شکل و به چه صورت راستش برام مبهم هست با تشکر فراوان؟؟

Milad Mohseny
سه شنبه 22 اردیبهشت 1388, 09:19 صبح
از عكس هاي بزرگ و با حجم بالا استفاده نكرديد؟
خيلي وقتا در resource عكس هاي زياد و بلا استفاده اي قرار دارد كه يادمون رفته پاكشون كنيم.

tdkhakpur
سه شنبه 22 اردیبهشت 1388, 12:25 عصر
سلام:
ببینید شما ه dll رو چگونه اجراش میکنید مگه مسیر داخل برنامه exeتون براش در نظر نمیگیرید تا از اون مسیر فایل dll رو اجرا کنه اگر هم مسیر نداشته باشه خوب اسم فایل dll رو میدید.
حال شما یک ورودی در داخل برنامه exeتون درنظر بگیرید که در حین اجرا مسیر dll رو ازشما بگیره و در فایلی این مسیر رو ذخیره کنه تا اگه بعدا تغییرتی در dll دادید دیگه احتیاجی به تعویض و تغییر کد exe نداشته باشید.

ghrzarei
سه شنبه 22 اردیبهشت 1388, 21:07 عصر
با تشکر از دوستان (Milad Mohseny (http://barnamenevis.org/forum/member.php?u=13995) و tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732))
نکات قابل توجه :
1- من هیچ گونه عکسی و یا ایکونی در برنامه استفاده نکرده ام.
2- از خود کامپونتهای vs استفاده کرده ام .
3- من قبلا با vb6 کار می کردم برنامه های با گستردگی بیشتر و تعداد فایل بیشتر و حتی فرمهای حاوی عکس در فرم اصلی برنامه استفاده می کردم ولی حجم فایل اصلی من (یا همون exe اصلی ) به مراتب بسیار کمتر از پروژه فعلی بوده است .
4- و نکته بسیار جالب اینکه در یکی از dll تعداد فراوان فرم و کدو و عکس و... دارم ولی حجمش یک چهارم exe اصلی هست علتش ؟؟؟؟؟؟

tdkhakpur
سه شنبه 22 اردیبهشت 1388, 21:24 عصر
سلام:
مطمئنا همون موارد بالا باید باشه و چیز دیکه هم نیست.
دوشت گرامی بهتون یه پیشنهاد دارم مگه exe شما چقدر سایز داره شما سعی کنید exe تون رو کامل کنید و اندازه exe رو ول کن از این به بعد dll ها رو با برنامتون ارتباط بدید.
باعث پیشرفتتون میشه. (با این همه پیشرفت چرا به فکر 2 یا 3 مگابایت حافظه باشیم تازه بهتون میگم حتما exeتون حجمش به 20و 50 مگابایت هم برسه ضرر نداره).
موفق باشید.

vcldeveloper
سه شنبه 22 اردیبهشت 1388, 23:08 عصر
ببینید شما ه dll رو چگونه اجراش میکنید مگه مسیر داخل برنامه exeتون براش در نظر نمیگیرید تا از اون مسیر فایل dll رو اجرا کنه اگر هم مسیر نداشته باشه خوب اسم فایل dll رو میدید.
حال شما یک ورودی در داخل برنامه exeتون درنظر بگیرید که در حین اجرا مسیر dll رو ازشما بگیره و در فایلی این مسیر رو ذخیره کنه تا اگه بعدا تغییرتی در dll دادید دیگه احتیاجی به تعویض و تغییر کد exe نداشته باشید.
فکر می کنید ذخیره تعداد محدودی string که طول هر کدامشان شاید در بدترین حالت ممکن به 255 کارکتر برسد، باعث افزایش حجم برنامه به شکل چشمگیر می شود؟!! اگر این بنده خدا 100 رشته یونیکد 255 کارکتری را هم برای ذخیره مسیرهای DLLهای مورد نیازش استفاده کرده باشد، نهایتا چیزی کمتر از 100 کیلوبایت به حجم برنامه اش افزوده می شود!


دوشت گرامی بهتون یه پیشنهاد دارم مگه exe شما چقدر سایز داره شما سعی کنید exe تون رو کامل کنید و اندازه exe رو ول کن از این به بعد dll ها رو با برنامتون ارتباط بدید.
باعث پیشرفتتون میشه. (با این همه پیشرفت چرا به فکر 2 یا 3 مگابایت حافظه باشیم تازه بهتون میگم حتما exeتون حجمش به 20و 50 مگابایت هم برسه ضرر نداره).
اتفاقا وقتی حجم بدون دلیل مشخص به شکل چشمگیری افزایش پیدا می کند، باید دنبال مشکل گشت، نه اینکه با بی خیالی گذشت. برنامه های #C برنامه های Stand-aloneایی نیستند که تصور کنیم همه کدهای مورد نیاز برنامه در داخل EXE جمع شده، و به همین دلیل حجم EXE افزایش پیدا کرده. بخش عمده ایی از امور مربوطه توسط .Net Framework انجام میشه، و حجم .Net Framwork همه به اندازه کافی بزرگ هست. برنامه #C ایی که از دات نت فریم استفاده می کند، باید حجم فایل EXE آن کوچک باشد، بخصوص که کاربر مدعی است از گرافیک و عکس و آیکن خاصی هم استفاده نکرده، و فقط به کامپوننت های استاندارد VS اکتفا کرده.