PDA

View Full Version : افزایش سرعت کامپایل در دلفی



MohsenB
شنبه 06 آبان 1391, 18:22 عصر
سلام

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

خوب ، اگه شما هم مایل به این کار هستید ادامه مطلالب رو بخونید و اگر هم روش بهتری سراغ دارید دریغ نکنید .

یکی از اولین نرم افزارایی که من همیشه بعد از نصب ویندوز نصب میکنم ، یک برنامه ساخت درایو از نوع رم ( RAMDISK) هست .
شما هم یکی از این نرم افزار ها رو حتما نصب کنید ، خیلی مفیده . در زیر چند نمونه از این نرم افزارها را لیست میکنم :

SuperSpeed RamDisk
GiliSoft RamDisk
Primo Ramdisk

کار این نرم افزارها اینه که میاد یک پارتیشن مجازی میسازه منتها فضای مورد نیازش رو از رم سیستم میگیره . ( پس شما نیاز به فضای کافی رم هم هستید )
بهتون پیشنهاد میکنم اسم درایوی که میخواهید بسازید رو Z بزارید .
بعد از نصب تنظیمات زیر رو توی دلفی انجام بدهید :

بعد از شروع یک پروژه ( انجام این تنظیمات یک بار برای هر پروژه کفایت میکند ) به منوی "پروژه" و بعد "Options" بروید .
در برگه Delphi Compiler در حالی که گزینه Target روی "Debug..." قرار دارد دو گزینه :
Output Directory
Unit Output Directory
را به حالت زیر تغییر دهید :
Z:\$(Platform)\$(Config)

نکته : اگر میخواهید این تنظیمات را سریعتر انجام دهید بعد از این مراحل یکبار این تنظیمات را توسط گزینه Save بالای همین برگه ذخیره کنید و هر موقع که به تنظیم مجدد نیاز داشتید از گزینه Apply استفاده نمایید .

طبق تستی که نجام دادم سرعت استفاده از رم دیسک بجای هارد حدود دوازده برابر هست ( البته روی سیستم من ) که خودش میتونه مبنایی برای مقایسه سرعت کامپایل باشه و اونو از وابستگی به سرعت انتقال بین هارد جدا کنه . مورد بعد اینه که شما وقتی یه برنامه ساده با دلفی مینویسید حداقل ( XE2=<) حجم فایل اجرایی 10 مگابایت میشه که هر موقع شما کامپایل رو انتخاب می کنید فایل قبلی پاک شده و فایل جدید جایگزین میشه به این موارد فایل های dcu رو هم اضافه کنید و از نظر انتقال اطلاعات بین هارد و هم صدمه که میزنه ( البته خیلی کم ) در نظر بگیرید ...


امیدوارم مورد کاربرد شما قرار گیرد

موفق و پیروز باشید

Felony
شنبه 06 آبان 1391, 21:22 عصر
1- از Primo Ramdisk استفاده نکنید ؛ چند بار دست منو بدجوری تو پست گردو گذاشته ، به شخصه GiliSoft Ramdisk رو پیشنهاد میکنم .

2- حتما از برنامه ای برای پشتیبان گیری خودکار از اطلاعات RAM Disk در هر چند دقیقه استفاده کنید ، من قبلا که از این روش استفاده میکردم برنامه ای نوشته بودم که همیشه اجرا بود و وقتی پیغام خاصی بهش میرسید عملیات پشتیبان گیری از Ram Drive رو انجام میداد ، تو فایل dpr همه پروژه های یک SendMessage میزاشتم و پیغام مثلا WM_BackupProject رو به برنامه پشتیبان گیر میفرستادم و اون هم از پوشه مربوط به برنامه یک کپی میگرفت ، با این شیوه هر بار که برنامه کامپایل و اجرا میشد به صورت خودکار یک کپی ازش روی هارد میگرفتم تا اگر اتفاقی برای سیستم افتاد و Ram تعطیل شد بدبخت نشم .

3- SSD هم گزینه مناسبی هست ، سال پیش که ارزونی بود من یه 64 خریدم ، از اون موقع زندگی زیبا شد :چشمک:

MohsenB
شنبه 06 آبان 1391, 22:46 عصر
سلام

به نظر من بهترین نرم افزار تو این زمینه SuperSpeed RamDisk هستش ولی چون الان هنوز نسخه مناسب ( کرک شده :چشمک: ) ازش برای ویندوز 8 نیومده من دارم روی Dataram RAMDisk تست میکنم ( البته یادم رفت به لیست بالا اضافه کنم ) . این نرم افزار خوب و رایگانیه .

یه چند تا نکته اینکه روش آقا مجتبی با من یکم فرق کرد ، اینطور که توضیح دادن کل پروژه رو روی این درایوها ریخته بودن ولی من منظورم این بود که فقط محل ساخت فایل دیباگ ( که موقع تست و توسعه نرم افزار استفاده میشه ) رو روی اون قرار بدیم . اینطوری اصلا نیازی به بکاپ نیست چون کد اصلی روی هارد اصلی هست . و یه چیز دیگه اینکه کد برنامه به احتمال زیاد یا توی حافظه رم لود میشه یا نهایتا توی یک فایل چند کیلو بایتی ذخیره ( فقط موقع ذخیره کردن توسط کاربر ) و لود میشه که زیاد تاثیری نداره . و فقط کافیه طبق معمول موقع ساخت فایل نهایی خروجی برنامه رو روی Release قرار داده و ... و در جای اصلی خودش قرار میگیره .
فقط یکم باید آدرسهای فایلهای استفاده شده در برنامه رو احتمالا تغییر بدید که اونم با تغییر موقت هنگام دیباگ و دادن آدرس کامل درست میشه .

استفاده از حافظه های SSD هم روش خوبیه نسبت به هارد دیسک . اگه اشتباه نکم SSD ها هم محدودیت نوشتن دارن ( البته خیلی زیاده ) ، ولی از این که بگذریم دو مورد دیگه هم دارن که یکم در مقابل رم کم میارن : یکی اینکه ارتباطش با کامپیوتر توسط کابل ساتا هست که مسلما سرعتش نسبت به باس ارتباطی رم خیلی خیلی پایینه ، و یکی دیگه قیمتشه که فعلا خیلی نجومیه . البته اگه از هر دو بصورت کنار هم استفاده بشه چی میشه ... .

محض سرگرمی ( یا بازی با سرعت ) یه عکس از جابجایی یه فایل به حجم 550 مگابایت رو درون یه رم دیسک گذاشتم ، البته به سختی تونستم عکس بگیرم چون خیلی سریع میرفت . خوب به سرعت نگاه کنید ، البته توجه کنید که پایان کپی تونستم عکس بگیرم و معمولا پایان کپی یکم سرعت پایینتره :



http://barnamenevis.org/asset.php?fid=90473&uid=63752&d=1351366258

Felony
یک شنبه 07 آبان 1391, 05:39 صبح
بله من کل پروژه ها رو تو شرکت روی Ram Disk قرار میدادم چون هر پروژه حداقل از 300 فایل و نزدیک 1,000,000 خط کد تشکیل میشد که حتی بار کردنشون تو IDE هم زمان بر بود .

نرم افزار VSuite Ramdisk هم نرم افزار بسیار خوبی هست و من نرم افزاری رو در سرعت ساخت Virtual Disk روی Ram به سرعت اون ندیدم .


اگه اشتباه نکم SSD ها هم محدودیت نوشتن دارن ( البته خیلی زیاده )
بله محدودیت دارن ولی این محدودیت همونطور که گفتید خیلی زیاده ، در ضمن SSD ها ظرفیت کمکی دارن یعنی وقتی یک هارد SSD با ظرفیت 64 میخرین در حقیقت اون هارد چیزی در حدود 70 گیگابایت ظرفیت داره ، وقتی ظرفیت نوشتن در بیت خاصی به پایان میرسه اون بیت به یک بیت تازه نفس از این مثلا 6 گیگابایت فضای اضافی Map میشه و یک بیت تازه نفس جاشو پرمیکنه ، در ضمن SSD ها از الگوریتم های خاصی برای یکنواخت سازی میزان استفاده بهره میبرند .

توصیه میکنم این مقاله (http://www.fatehnet.net/index.php?option=com_content&view=article&id=2750:-ssd&catid=32:1390-02-05-07-06-04&Itemid=37) رو در مورد SSD ها مطالعه کنید ، اطلاعات خوبی داره .

راستی :

مورد بعد اینه که شما وقتی یه برنامه ساده با دلفی مینویسید حداقل ( XE2=<) حجم فایل اجرایی 10 مگابایت میشه
همین الان که دارم این پست رو مینویسم در حال کار روی یک پروژه شخصی هستم که نزدیک 3000 خط Manual Code داره و با XE2 در حال توسعه هست ، حجم فایل اجرایی بدون استفاده از Packer و ... = 3.4 مگابایت !

MohsenB
یک شنبه 07 آبان 1391, 10:44 صبح
بله من کل پروژه ها رو تو شرکت روی Ram Disk قرار میدادم چون هر پروژه حداقل از 300 فایل و نزدیک 1,000,000 خط کد تشکیل میشد که حتی بار کردنشون تو IDE هم زمان بر بود .

خوب اگر پروژه بزرگ باشه مطمئنا اینجوری بهتره


نرم افزار VSuite Ramdisk هم نرم افزار بسیار خوبی هست و من نرم افزاری رو در سرعت ساخت Virtual Disk روی Ram به سرعت اون ندیدم .

اینم که ساخت همون Primo هست .
یه جستجویی الان کردم و به نتایج بسیار خوبی رسیدم .
یه نگاهی به این (http://en.wikipedia.org/wiki/List_of_RAM_disk_software) صفحه که معرفی انواع این نوع نرم افزارهاست و همینطور این (http://www.raymond.cc/blog/12-ram-disk-software-benchmarked-for-fastest-read-and-write-speed/) صفحه که مقایسه اونهاست بندازید .
من تو این مقایسه ها نرم افزار SoftPerfect RAM Disk رو انتخاب کردم چون بنظر از همشون بهتر بود ، و واقعا هم همینطوره . وقتی تست کردم مثل آزمایش قبل موقع کپی اون فایل 550 مگابایتی اصلا دیگه پنجره کپی هم ظاهر نشد!!! و خلاصه این یکی تا الان که خیلی عالیه و امکاناتی نظیر پشتیبانی از سیستم عامل های 64 و 32 بیت رو برای تمام ویندوزها حتی ویندوز 8 رو هم داره ، محیط بسیار ساده و کاربردی و همینطور توانایی کار با ایمیجها رو هم داره .



راستی :

همین الان که دارم این پست رو مینویسم در حال کار روی یک پروژه شخصی هستم که نزدیک 3000 خط Manual Code داره و با XE2 در حال توسعه هست ، حجم فایل اجرایی بدون استفاده از Packer و ... = 3.4 مگابایت !

وقتی من یه پروژه تازه باز میکنم و بدون هیچ تغییری اجرا میکنم حجمش حدود 6.9 مگابایته ، اگر توی تنظیمات پروژه در برگه Linking از مجموعه Delphi Compiler گزینه اول یعنی Debug Information رو غیر فعال کنم حجم فایل خروجی به 1.3 مگابایت کاهش پیدا میکنه . ( البته همه این اندازه هایی که نوشتم منظور حالت دیباگ بود )