View Full Version : چگونه حجم برنامه نوشته شده را کاهش دهیم؟
hamedjafari
یک شنبه 22 شهریور 1388, 19:25 عصر
دوباره سلام.
یه برنامه ساده با دلفی نوشتم که با فشردن یه باتن ، Caption یه لیبل تغییر کنه . همین کارو با VB هم انجام دادم . تفاوت زیادی تو حجم فایل اجرایی برنامه ها وجود داشت .
یه سرچ کوچیک که زدم یه جایی گفته بود کافیه تیک Build with runtime packages رو تو منوی Project و گزینه Options (با کلید میانبر Shift+Ctrl+F11 )بزنیم.
می خواستم بدونم تنها راه حل همینه؟ اصلا چرا باید اینقدر تفاوت تو حجم فایل ها در Delphi و VB باشه؟
vcldeveloper
یک شنبه 22 شهریور 1388, 23:54 عصر
می خواستم بدونم تنها راه حل همینه؟ اصلا چرا باید اینقدر تفاوت تو حجم فایل ها در Delphi و VB باشه؟
بخاطر حجم runtime. برنامه های VB برای اجرا نیاز به Runtime VB دارند؛ یعنی کتابخانه زمان اجرا VB. برای همین هم به همراه یک برنامه VB باید یک دوجین فایل به سیستم کاربر منتقل کنید، یا مطمئن باشید که کتابخانه Runtime VB نسخه استفاده شده توسط شما، روی سیستم کاربر نصب باشه. پس حجم برنامه VB شما مساوی هست با حجم فایل EXE شما + حجم کتابخانه هایی که برنامه شما برای اجرا به آنها نیاز داره.
دلفی بطور پیش فرض فایل Stand-alone میسازه، یعنی فایلی که برای اجرا شدن نیاز به فایل یا کتابخانه دیگه ایی نداره. چون این فایل باید همه چیزهای مورد نیاز خودش را با خودش داشته باشه، هر بخشی از کد که از هر کتابخانه ایی در برنامه استفاده شده باشه را به فایل EXE لینک میکنه. در نتیجه فایل EXE بزرگتر از فایل تولید شده توسط VB یا VC میشه، ولی دردسرهای نصب و انتقال آنها را نداره؛ پس حجم برنامه دلفی شما مساوی هست با حجم همون فایل EXE.
برنامه نویس دلفی میتونه در صورت نیاز، این رفتار را تغییر بده، یعنی به کامپایلر بگه که همه یا برخی از کدهای استفاده شده از کتابخانه ها را به داخل فایل EXE منتقل نکنه، در اون صورت، حجم فایل EXE کم میشه، ولی اگر برنامه از کتابخانه خاصی استفاده کرده باشه، باید فایل مربوط به اون کتابخانه را هم به سیستم کاربر منتقل کنه.
در VC++ گزینه پیش فرض این هست که کدهای کتابخانه های استفاده شده در داخل EXE قرار نگیره، چون از یک طرف مایکروسافت به عنوان شرکت سازنده آن، سعی کرده این فایل ها را به همراه سیستم عامل روی سیستم کاربر نصب کنه (هر چند باز چون برنامه نویس مطمئن نیست که نسخه مورد نظرش روی سیستم کاربر نصب هست یا نه، باید این فایل ها را در Setup برنامه قرار بده)، هم از طرف دیگه، کامپایلر آن امکان لینک کردن هوشمند کد کتابخانه ها را نداره، یعنی برخلاف دلفی که فقط اون بخشی از کتابخانه را که استفاده شده در فایل EXE قرار میده، در VC++ تا جایی که اطلاع دارم، یا کلا باید فایل های کتابخانه به همراه EXE منتقل بشند، یا کل کتابخانه باید در داخل فایل EXE قرار بگیره که حجم فایل EXE را فوق العاده بالا میبره؛ یعنی برنامه های Stand-alone ساخته شده با VC++ بسیار بزرگتر از فایل های EXE تولید شده با دلفی هستند، برای همین هم کمتر از این گزینه در اون کامپایلر استفاده میشه.
البته برنامه نویس دلفی این امکان را هم داره که بجای استفاده از VCL برای ساخت برنامه، کل برنامه را با استفاده از توابع API ویندوز بنویسه. در این صورت حجم فایل EXE تولید شده فوق العاده پایین میاد، ولی حجم کار برنامه نویس بسیار بالا میره.
lord_viper
دوشنبه 23 شهریور 1388, 10:26 صبح
میشه از کامپوننت col هم استفاده کرد
حجم روخیلی پایین میاره انگار با توابع api فورم رو ایجاد کردین
FiACKER
دوشنبه 23 شهریور 1388, 12:43 عصر
لینکه این کامپوننتی که گفتین رو می گین ؟
اخه col خیلی خلاصه اس.
vcldeveloper
دوشنبه 23 شهریور 1388, 18:37 عصر
col نه؛ KOL.
یک مجموعه کامپوننت هست که سعی کرده برخی توابع و کلاس های استاندارد دلفی را با اسمبلی بازنویسی کنه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.