PDA

View Full Version : کم کردن حجم فایل EXE برنامه!



kiko208
یک شنبه 27 مرداد 1387, 20:13 عصر
با سلام

چطوری میشه در هنگامه کامپایل کردن حجم برنامه را بسیار کم کرد . من شنیدم بعضی از کتابخانه ها را خذف کرد ؟ اگه میشه بیشتر توضیح بدید .
پیشاپیش ممنونم .

babak_delphi
یک شنبه 27 مرداد 1387, 20:21 عصر
قبلا بحث شده و راه حل ارائه شده
(فکر کنم توسط آقای کشاورز)
جستجو کنید.

kiko208
یک شنبه 27 مرداد 1387, 20:45 عصر
نمیخواهم از پکر استفاده کنم آنت ها میگیرنش . بیشتر توسط خود دلفی میخوام اینکار را انجام بدم

Hsimple11
یک شنبه 27 مرداد 1387, 21:12 عصر
منظور حجم فایل EXE هست؟

Felony
یک شنبه 27 مرداد 1387, 21:21 عصر
منظور حجم فایل EXE هست؟

فکر میکنم همین طوره چون ایشون گفتن موقع کامپایل برنامه ...

Hsimple11
یک شنبه 27 مرداد 1387, 22:08 عصر
برای کاهش حجم فایل EXE برنامه یک راه حل وجود ندارد. در واقع مجموعه ای از عوامل باعث کاهش یا افزایش حجم برنامه شما می شوند.

جدا از ابزارهایی که یا به نحوی برنامه شما را فشرده می کنند مانند ASPACK یا Blinker و برنامه هایی که Library هایی استفاده شده را از خود فایل EXE جدا کرده و آنها را به آن Bind میکنند؛ راهکارهای مختلفی برای کاهش حجم فایل EXE برنامه وجود دارد :


1- استفاده از Statement هایی مانند Case...Of بجای نوشتن شرط IF برای هر شرط.

2- تا حد امکان استفاده از تصاویر کم حجم با کیفیت رنگ پایین (در مواقع غیر ضروری).

3- به هر نحو اگر از تصاویر با حجم نسبتا بالا در برنامه خود استفاده میکنید بهتر است بجای قرار دادن آنها در زمان طراحی، آنها را هرموقع که ضروری باشد در برنامه خود فراخوانی کنید (مثلا در یک Resource Stream) و بعد هم آنها را Free کنید.

4- اگر از ریسورسها در برنامه خود استفاده میکنید تنها فایلهایی را در فایل ریسورس قرار دهید که به آنها نیاز دارید.

5- برنامه خود را یک دور چک کنید و هر متغیر یا پروسیجری یا function ای که بلااستفاده تعریف کرده اید را پاک کنید. برای پیدا کردن متغیرها یا توابع و Procedure های بلااستفاده در منوی Project|Options و تب Compiler Messeges (در دلفی 7) چک باکسهای Show Hints و Show Warnings را علامت بزنید.

6- یونیتهایی را که به آنها احتیاجی ندارید از لیست USES یونیت خود پاک کنید. البته اینکار مستلزم این است که شما بدانید هر دستوری که در برنامه تان استفاده کرده اید به چه یونیتی مربوط میشه که بدونین یونیتهای بلااستفاده کدومان.
البته ما بحثی با عنوان SmartLinking هم داریم که دلفی خودش یونیتهایی رو که در USES تعریف شده اند ولی از اونا استفاده شده رو عملا حذف میکنه اما این مسئله تو پروژه های بزرگ کاملا به درستی عمل نمیکنه.

7- از اونجا که فایلهای ریسورس هم در فایل EXE شما کامپایل میشه، بهتره اگر عکس ها یا تصاویر زیادی دارید بجای قرار دادن اونا در فایل ریسورس اونا رو در یه DLL قرار بدید تا به EXE شما لینک داده بشه. میتونید فایلهای ریسورس خودتون رو توی یک فایل DLL بذارید و در برنامه DLL خودتون رو لود کنید.

8- تا جایی که امکان داره از تعداد فرم کمتری در برنامه خود استفاده کنید. وقتی یک فرم دارید حتی اگه تعداد زیادی کنترل روی اون دارید، باز هم فقط از یک کلاس TForm دارید استفاده میکنید. اما اگر از تعداد فرم ها و به تبع اون یونیتهای زیادی استفاده کنید هر کلاس نیاز به اطلاعات Run-Time خودش داره که این حجم فایل EXE شما رو بالا میبره. بنابراین سعی کنید تا حد ممکن فرمهای کمتری در برنامه داشته باشید.

9- سعی کنید از بسته های RunTime استفاده کنید. حتی میتونید بسته هایی رو که در برنامه خودتون استفاده میکنید با گزینه Build With RunTime Packages موجود در تب Packages در Project|Options بسته های خودتون رو در بسته های Runtime همراه خود دلفی مانند VCL*.BPL قرار بدید.

مسلما راهکارهای دیگری نیز وجود دارد.

موفق باشید...

Naruto
پنج شنبه 07 شهریور 1387, 10:55 صبح
سلام.
من یه دکمه گذاشتم روی فرم کامپابل کردم.شد 400 کیلوبایت.دلفی 2007 .
با VB.Net 2008 شد 16 کیلو بایت.
من تازه دلفی شروع کردم.جریان چیه؟
================================================== =
خارج از موضوع:
البته ناگفته نمونه برنامه دلفی سریعتر از Net. اجرا میشه و تقریبا سه برابر کمتر حافظه مصرف میکنه.اینا رو از Task Manager دیدم.خدا بخیر کنه.

amin_alexi
پنج شنبه 07 شهریور 1387, 20:06 عصر
من یه دکمه گذاشتم روی فرم کامپابل کردم.شد 400 کیلوبایت.دلفی 2007 .
با VB.Net 2008 شد 16 کیلو بایت.
من تازه دلفی شروع کردم.جریان چیه؟
خودت کمابیش توضیح دادی !!
برنامه های نوشته شده با .NET برای اجرا به .NETّFrameWork نیاز دارند و خیلی از توابع و فایلهای مورد نیاز رو از همونجا میگیرن ! و خیلی وقتا کنار فایل Exe تو .NET تعدادی Dll وجود داره که استفاده از اونها یه مقدار سرعت رو پایین میآره ولی دلفی اکثر موارد لازم رو تو فایل Exe میزاره واسه همین هم حجمش میره بالا

hadisalahi2
پنج شنبه 07 شهریور 1387, 20:16 عصر
یکی دیگه از روشهای کم کردن حجم فایلهای Exe استفاده از فایلهای DLL است.
یکی دیگه از روشها هم قرار دادن فایلهای تصویری داخل فایهای Resource است

lord_viper
پنج شنبه 07 شهریور 1387, 23:14 عصر
میتونی برنامتو بطور کامل با api بنویسی اون موقع حجم برنامت زیر 30kb میشه
هم استفاده از کامپوننت (Key Object Library (KOL هستش که بیشتر از دستورات اسمبلی و یونیت ویندوز واسه توابع و پروسیجر هاش استفاده کرده

Naruto
جمعه 08 شهریور 1387, 15:30 عصر
برنامه های نوشته شده با .NET برای اجرا به .NETّFrameWork نیاز دارند و خیلی از توابع و فایلهای مورد نیاز رو از همونجا میگیرن ! و خیلی وقتا کنار فایل Exe تو .NET تعدادی Dll وجود داره که استفاده از اونها یه مقدار سرعت رو پایین میآره ولی دلفی اکثر موارد لازم رو تو فایل Exe میزاره واسه همین هم حجمش میره بالا


خیلی ممنون از پاسختون.
پس اگه من با Delphi.Net بنویسم حجمش خیلی کمتر میشه دیگه؟

vcldeveloper
جمعه 08 شهریور 1387, 18:06 عصر
پس اگه من با Delphi.Net بنویسم حجمش خیلی کمتر میشه دیگه؟
بله، البته باید Net Framework. را روی سیستم کاربر نصب داشته باشید که حجمش در حدود 12 مگ هست.