خانه » ادوبی ایر » بهینه سازی فلش – آزاد سازی حافظه

بهینه سازی فلش – آزاد سازی حافظه

بهینه سازی در فلش یک اصل مهم به حساب می آید و افزایش و کار بر روی آن برای توسعه دهندگان فلش امری الزامی است. به عنوان یک توسعه دهنده فلش و به عنوان کسی که برای آینده این نرم افزار بزرگ احساس مسئولیت می کند ، ما وظیفه داریم در ساخت عناصر فلش که کارایی بهتری دارند پیش گام باشیم و همواره بهترین و بهینه ترین روش را استفاده کنیم. در این مجموعه آموزشی بهینه سازی فلش به نکات مهم برای مدیریت بر عناصر و حافظه ها … می پردازیم و تلاش می کنیم که بتوانیم با استفاده از نکات ارائه شده خروجی بهینه تر و سبک تری از پروژه فلش خود داشته باشیم.

بخش پنجم – آزاد سازی حافظه (Memory)

شما نمی توانید جمع آور زباله (garbage collector) را به صورت مستقیم در فلش پلیر اجرا کنید. برای این که اطمینان پیدا کنید که یک شی جمع آوری شده است می بایست تمامی منابع آن را حذف کنید. به یاد داشته باشید که عملگر مورد استفاده در اکشن اسکریپت ۱ و ۲ رفتار متفاوتی در اکشن اسکریپت ۳ دارد. این مورد را تنها می توان برای حذف خصوصیات پویا (Dynamic) از یک شی پویا استفاده نمود.

توضیح : جمع آوری زباله (Garbage collection) یک اصطلاح می باشد که به عمل پاک سازی و جمع آوری اشیاء  (object) هایی که استفاده ای نمی شوند و حافظه را اشغال کرده اند ، اطلاق می شود.

تذکر: شما می توانید جمع آوری کننده زباله (garbage collector) را در ادوبی ایر (Adobe AIR) و نسخه  (Debug) فلش پلیر به صورت مستقیم فراخوانی کنید.

به عنوان مثلا ،در کد زیر منابع یک Sprite را برابر با null قرار می دهیم ؛ و با این کار جمع آور زباله آن را از حافظه حذف می کند.


var mySprite:Sprite = new Sprite();

// منابع مربوطه با نال (تهی) مقدار دهی شد و در نتیجه جمع آور زباله این مورد را از حافظه حدف می کند.
mySprite = null;

به یاد داشته باشید زمانی که به یک شی مقدار null را می دهید ، لزوما از حافظه حذف نخواهد شد. بعضی اوقات اگر حافظه موجود کمتر از مقدار کافی به نظر نرسد جمع آور زباله (garbage collector) اجرا نمی شود. جمع آوری زباله (Garbage collection) قابل پیشبینی نیست.

تخصیص درست حافظه ، ترجیح داده می شود به حذف شی (obejct) و آغاز جمع آوری زباله.

زمانی که جمع آورنده زباله (garbage collector) اجرا می شود ،فهرستی از اشیاء ی که جمع آوری نشده است را ایجاد می کند. حال اشیاء غیر فعال درون فهرست که دیگر استفاده نمی شوند ، با تشخیص منابع اشیاء در دیگر اشیاء ، مشخص می شود ، اشیاء غیرفعال شناسایی شده از این راه حذف می شوند.

در برنامه های بزرگ ، این فرایند می تواند باعث تشدید فشار بر پردازنده (CPU-intensive) ، تاثیر بر کارایی برنامه (performance) و کاهش قابل توجه سرعت در برنامه شود. سعی کنید به منظور محدود کردن جمع آوری زباله (garbage collection) تا آن جا که امکان پذیر است از ، استفاده دوباره از اشیاء استفاده کنید.

همچنین از دادن مقدار null به منابع بی استفاده ، در زمانی که امکان دارد ، استفاده کنید. با این کار جمع آورنده زباله (garbage collector) پردازش کمتری برای پیدا کردن اشیاء خواهد داشت. می توان به جمع آوری زباله (garbage collection) مثل بیمه حافظه مصرفی یک برنامه نگاه کرد ، و در ضمن همیشه سعی کنید به مدیریت طول عمر اشیاء (در صورت امکان) دقت کنید.

تذکر : تعیین یک مرجع از یک شی نمایشی (display object) با مقدار null تضمینی برای این که آن شی منجمد (freeze) شده باشد نیست. شی همچنان به مصرف پردازنده (CPU) در سیکل زمانی  ادامه می دهد تا زمانی که جمع آوری زباله انجام شود. قبل از مقدار دهی منابع به null ،  اطمینان حاصل کنید که شی شما به درسی غیر فعال شده است.

جمع آورنده زباله را می توانید با استفاده از متد System.gc() فراخوانی کنید ، البته توجه داشته باشید این فراخوانی مستقیم مربوطه به Adobe Air و فلش پلیر نسخه Debug می باشد. Profiler toolbar ی که همراه برنامه Adobe Flash Builder می باشد به شما این امکان را می دهد که به صورت دستی جمع آور زباله (garbage collector) را شروع کنید. با اجرای جمع آورنده زباله شما این امکان را دارید که مشاهده کنید که چگونه برنامه شما پاسخ می دهد و آیا اشیاء به درستی از حافظه حذف شده است یا خیر.

تذکر : اگر یک شی به عنوان یک شنونده (listener) رویداد استفاده شده است ، شی دیگر می تواند به آن ارجاع شود. اگر این حالت باشد ، می بایست رویداد شنوندها توسط متد removeEventListener() قبل از مقدار دهی null به شی حذف شود.

خوشبختانه ، مقدار حافظه استفاده شده توسط bitmap ها را می توان مستقیم کاهش داد. به عنوان مثل کلاس BitmapData دارای متد dispose() می باشد. در مثال بعدی ، یک BitmapData ایجاد می کنیم (۱.۸MB  حافظه). حافظه جاری به مقدار ۱.۸MB افزایش پیدا می کند. توسط خصوصیت System.totalMemory می توانیم خروجی حافظه اشغال شده را مشاهده کنیم :


trace(System.totalMemory / 1024);
// خروجی : ۴۳۱۰۰

//  ساخت یک نمونه BitmapData
var image:BitmapData = new BitmapData(800, 600);

trace(System.totalMemory / 1024);
// خروجی : ۴۴۹۶۴

در مثال بعدی BitmapData ساخته شده به صورت دستی از حافظه حذف می شود (با کمک متد dispose) و دوباره مقدار حافظه چک می شود :


trace(System.totalMemory / 1024);
// خروجی: ۴۳۱۰۰
//  ساخت یک نمونه BitmapData
var image:BitmapData = new BitmapData(800, 600);

trace(System.totalMemory / 1024);
// خروجی : ۴۴۹۶۴

image.dispose();
image = null;

trace(System.totalMemory / 1024);
// خروجی : ۴۳۰۸۴

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

تذکر : فلش پلیر ۱۰.۱ و ادوبی ایر ۱.۳.۲ متد جدیدی با نام disposeXML() بر روی کلاس های System معرفی نموده اند. این متد به شما این امکان را می دهد که با مقدار دهی XML tree به عنوان پارامتر آن ، شی XML را بلافاصله برای جمع آوری زباله (garbage collection) آماده کنید.

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

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

16 نظر

  1. سلام، ممنون از آموزش خوبتون. استفاده از مطلبی را که فرمودید، بلامانع است

  2. سلام بهروز جان.سایت خوبی داری-۱ سوال دارم .
    من فلش نصب کردم حالا می خوام فارسی کنم.هر کار میکنم نمیشه و برعکس فارسی مینویسه.یک کامپوننت به نام پارسی فلش هم نصب کردم و جواب نداد و فارسی نشد.چی کار کنم که بتونم فارسی بنویسم تو فلش.اگه میشه راهنمایی کن. اگرم نرم افزاری چیزی واسه فارسی کردن داری بهم معرفی کن به میلم.ممنون

    • سلام دوست عزیز
      برای فارسی نویسی بهترین راه استفاده از TLF هست در زمانی که یک باکس متنی ایجاد می کنید در پانل properties به شما امکان انتخاب این گزینه داده می شود
      که با فعال کردن امکانات فارسی و تعیین زبان فارسی می توانید به راحتی و مستقیم فارسی بنویسید ولی برای این مورد حتما می بایست فلش پلیر روی ورژن ۱۰ به بالا تنظیم شده باشد
      برای بقیه موارد می توانید از فارسی استایل استفاده کنید
      http://www.farsistyle.com نمونه ها را هم در سایت معرفی شده دانلود و تست کنید
      موفق و پیروز باشید

  3. ممنون بهروز جان ولی :
    ۱) منظورت از TLF چیه ؟
    ۲) من فارسی میتونم بنویسم ولی مثلا سلام رو اینجوری مینویسه —> م ا ل س
    ۳) تو سایت FARSISTYLE رفتم و دانلود کردم ولی خوب فقط توی فابل های خودش فارسی میتونم بنویسم نه جای دیگه .

    • سلام در مورد TLF تکست فیلد جدید می باشد که از نسخه CS4 برای فلش ایجاد شد و در نسخه CS5 توسعه داده شده و بخشی اصلی برای متون قرار گرفته است
      وقتی برای تایپ متن اقدام می کنید و ابزار T را انتخاب می کنید و توی صفحه کلیک می کنید در همان زمان شما در پانل properties در بخش بالایی آن خصوصیاتی را مشاهده می کنید در اولین گزینه Classic Text v را می توانید به TLF Text تغییر دهید با این کار خصوصیات پایین هم تغییر می کنید و شما می توانید RTL و زبان فارسی را فعال کنید

      در این باره در وب بیشتر جستجو کنید

      در مورد فارسی استایل شما با توجه به نمونه ها می توانید آن را در پروژه خود پیاده سازی کنید
      به کد های مورد استفاده دقت کنید و توجه داشته باشید که فونتی که در Library وجود دارد را حتما درون پروژه خودتان داشته باشید

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

  4. سلام بهروز جان.
    من ۱ فلش ساختم ولی مشکلم اینه که وقتی به آخر میرسه متوقف نمیشه .باز دوباره از اول میاد.چی کار کنم که همونجا آخر که تموم شد متوقف بشه . ممنونم

    • سلام دوست گرامی
      می توانید در آخرین فریم یک فریم کلیدی بسازید (با انتخاب آخرین فریم و فشردن کلید f6) و بعد دوباره فریم آخر را انتخاب کنید و کلید f9 را فشار دهید تا بخش اکشن باز شود در بخش اکشن کد زیر را تایپ نمایید

      stop();
      

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

  5. واقعا مرسی. حالا یه سوال دیگه واسه اینکه به متنم جلوه بدم مثلا مثل متن که داخل پاور پوینت جلوه میدیم باید چی کار کنم ؟؟

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

    • خوب برای این افکت ها می بایست مثلا متن خودتون را به بخش های مختلف تقسیم کنید (مثلا توسط انتخاب متن و کلیدهای Ctrl + B) و بعد بخش را در لایه ای جدا قرار دهید و توسط موشن ها به افکت مورد نظر خودتان برسید
      اینجا بیشتر خلاقیت شما برای طرحی که دارید اهمیت دارد
      موفق و پیروز باشید

  7. سلام.یه مشکل جددی.من با فارسی ساز مریم فارسی نوشتم تو فلش.اکی بود و هست.حالا که فایل فلشمو یا ویدئو رو میبرم رو کامپیوتر دیگه اجرا کنم همه حروفش بهم میریزه.چی کار کنم ؟؟؟

  8. سلام بهروز جان.یه سوال داشتم.به این ویدئو ها و کلیپ بک گراندهای فیلمی که مثلا ۰ . ۱ میاد رد میشه یا به صورت ستاره یا انواع مدلهای دیگه که توی فلش پشت صفحه تبلیغاتشون کار میکنن چی میگن ؟ میخام برم بخرم چی بگم بدن واسه فلشم لازم دارم

    • سلام
      فکر نمی کنم دقیقا اینجور موارد برای فروش جایی باشد
      ولی احتمال دارد درون مجموعه های اینتروهای آماده فلش و یا وب سایت های آماده فلش مواردی که شبیه به نیاز شما باشد پیدا شود
      این طور مجموعه ها فکر می کنم موجود باشد

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

      در ضمن خودتان هم می توانید با کمی تلاش خیلی از این موارد را آماده کنید

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

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه