1397/9/6، 08:49 صبح
سلام ،
توی انجمن بحثی در رابطه با پرفرمنس و memory usage و غیره و غیره شنیده بودم که تصمیم گرفتم ی پست مجزا براش باز کنم و توضیحاتی از تجربیات شخصی خودم رو برای دوستان به نمایش بذارم ، امیدوارم مفید واقع بشه :
میزانی که در memory usage نوشته میشه ، تقریبا مهم هست ، به مثالی که برای خود بنده در بازی نبرد مدرن پیش اومد توجه کنید تا نهایتا نتیجه رو بهتون بگم :
نسخه اول نبرد مدرن من اومده بودم تمام اسپرایت ها و تمامی آبجکت و اکشن و ایونت هارو در یک لایوت بارگزاری کنم ، پس از اینکه نسخه اول رو انتشار دادم ، با توجه به گزارشاتی که به دستم رسید ، متوجه شدم تعدادی از کاربران بازی براشون اجرا نمیشد یا گزارشات جالب دیگه ای که بود این بود که میگفتن بار اول همیشه از بازی میپره بیرون
بعد به این memory usage برخوردم که دیدم مقدارش کمی بالا هست ( مقدار حدود 76 بود ) همچنین تعداد ایونت ها هم در نسخه اول حدود 3800 تا بود ، که میشد این مقدار رو بهینه کرد ،،، با اینکه توی نسخه دوم بازی نبرد مدرن بنده بخش های زیادی به بازی اضافه کردم ، مقداریش ظاهری بود و مقداریشم امنیتی بود و ظاهری نبود با این حال مقدار memory usage توی نسخه دوم به 25.4 رسید
که در نسخه دوم دیگه خبری از باگ بیرون اومدن از بازی نبود .
همچنین در نسخه دوم بازی تعداد ایونت ها به 2373 عدد رسید ، به عکس زیر توجه کنید :
ضمیمه ( این دو عکس نشون دهنده تغییرات روی بازی هست ، توجه کنید که هر دو عکس مال نسخه دوم بازی هست ، اما یکیش بهینه تر شده و بنده بیشتر روش کار کردم ، شاید اگر بیشترم کار میکردم بهینه ترم میشد )
![[تصویر: 0000.png]](http://s9.picofile.com/file/8343976468/0000.png)
همونطور که میبینید مقدار ایونت ها تغییری در این دو نسخه نداشته ، و بنده هرچی تونستم بهینه بکنم در اصل به پاس استفاده از عکس های سبک تر بود ، نسخه دوم بازی با عکس های سبک تر ( عدم استفاده از افکت های بیهوده و الکی ) و کلا چیز هایی توی همین دسته ها ... میشه گفت این رقم رو کمتر کردم ، البته بعد از این نسخه ، میخواستم نسخه ای جهت تست به مایکت هم ارسال کنم که جالب تر این بود که توی نسخه مایکت این مقدار به 19.9 رسیده بود . دلیل اینکه توی اون نسخه کمتر شده بود این بود که اومدم به جای استفاده از بک گراند های متفاوت در هر صفحه ( که حدود 20 صفحه بودن ) ، از یک بک گراند اما با صفحات مختلف استفاده کردم ، و البته افکت های نور و چرخش و اینجور چیز هارو توی بحش صفحه اول ( لوگوی بازی ) ، فلش متن لوگوی بازی ، صفحه لود بازی ( دارای افکت های مختلف متن و ... ) و صفحه فروشگاه و خیلی چیز های دیگه رو هم بروز رسانی کردم ، به طوری که برای بهینه سازی مجبور شدم به طور کلی تمامی بخش های این بازی رو تغییر بدم ، از گیم پلی گرفته تا صفحه لودینگ بازی ؛ نکته جالب دیگه اینکه ، من فهمیدم اگر شما به جای ساخت صفحات الکی و بیهوده سعی کنید صفحه لودینگ یک بازی رو در همون صفحه لول بازی بسازید ، در اصل این کار هم پرفرمنس بازی رو افزایش میده اون هم بصورت محسوس ، بعد از این گزینه شما حتی میتونید به جای استفاده از چندین لیوت ، از یک لیوت و چندین ایونت شیت استفاده کنید ، توجه داشته باشید ساخت چند ایونت شیت فقط برای این هست که خودتون هنگام کد نویسی قاطی نکنید ، در غیر اینصورت میشه همه رو توی یک ایونت شیت نوشت .
البته ی چیز خوشحال کننده ای که باید بهتون بگم ، این هست که ایونت ، تعداد وریبل ها ، حتی تعداد وریبل ها و حتی تعداد خیلی زیاد ایونت ها هیچ تاثیری در مقدار memory usage نداره !!!
یعنی memory usage فقط بر اساس آبجکت هایی که درون بازی ایمپورت میکنید محاسبه میشه ، آبجکت هایی که داخل بازی ایمپورت میکنید میتونه همون اسپرایت ها ، بک گراند ها ، افکت ها باشند ، پلاگین هایی که استاندارد هستند عملا مقدار آنچنانی از memory usage رو به خودش اختصاص نمیدن و عملا پلاگین ها مقدار ناچیزی از مموری رو درگیر خودشون میکنن .
برخلاف تصور اشتباه برخی از برنامه نویسان ، پرفرمنس ربطی به صفحه نمایش نداره ، یعنی اگرم تا الان فکر میکردید هرچقدر صفحه نمایش کوچیک تر باشه بهتره یا به عبارتی بازی روون تر میشه باید بگم اشتباه میکردید ، نمیدونمم اینارو کی میگه ولی در کل تو کل زندگیش داره اشتباه میزنه
نکته آخر : ی بازی تا زمانی که روی یک گوشی یا سیستم عامل مخصوص خودش راه اندازی نشه نمیشه درباره پرفرمنس و مقدار استفاده از اف پی اس و سی پی یو و رم ازش صحبت کرد ، حتی کنسول دیباگ در کانستراکت هم نمیتونه به شما برای ساخت یک بازی با پرفرمنس بهتر کمک کنه ، پنل دیباگ کانستراکت بیشتر بدرد همون عیب یابی میخوره ، به این صورت که اگر بخشی ازبازیتون عمل نکرد یا مشکلی داشت بتونید ازش استفاده کنید ، در غیر اینصورت برای پرفرمنس و بهینه سازی نمیشه زیاد ازش کمک گرفت .
موفق و پیروز باشید / حسن ثنایی .
توی انجمن بحثی در رابطه با پرفرمنس و memory usage و غیره و غیره شنیده بودم که تصمیم گرفتم ی پست مجزا براش باز کنم و توضیحاتی از تجربیات شخصی خودم رو برای دوستان به نمایش بذارم ، امیدوارم مفید واقع بشه :
میزانی که در memory usage نوشته میشه ، تقریبا مهم هست ، به مثالی که برای خود بنده در بازی نبرد مدرن پیش اومد توجه کنید تا نهایتا نتیجه رو بهتون بگم :
نسخه اول نبرد مدرن من اومده بودم تمام اسپرایت ها و تمامی آبجکت و اکشن و ایونت هارو در یک لایوت بارگزاری کنم ، پس از اینکه نسخه اول رو انتشار دادم ، با توجه به گزارشاتی که به دستم رسید ، متوجه شدم تعدادی از کاربران بازی براشون اجرا نمیشد یا گزارشات جالب دیگه ای که بود این بود که میگفتن بار اول همیشه از بازی میپره بیرون

بعد به این memory usage برخوردم که دیدم مقدارش کمی بالا هست ( مقدار حدود 76 بود ) همچنین تعداد ایونت ها هم در نسخه اول حدود 3800 تا بود ، که میشد این مقدار رو بهینه کرد ،،، با اینکه توی نسخه دوم بازی نبرد مدرن بنده بخش های زیادی به بازی اضافه کردم ، مقداریش ظاهری بود و مقداریشم امنیتی بود و ظاهری نبود با این حال مقدار memory usage توی نسخه دوم به 25.4 رسید

که در نسخه دوم دیگه خبری از باگ بیرون اومدن از بازی نبود .
همچنین در نسخه دوم بازی تعداد ایونت ها به 2373 عدد رسید ، به عکس زیر توجه کنید :
ضمیمه ( این دو عکس نشون دهنده تغییرات روی بازی هست ، توجه کنید که هر دو عکس مال نسخه دوم بازی هست ، اما یکیش بهینه تر شده و بنده بیشتر روش کار کردم ، شاید اگر بیشترم کار میکردم بهینه ترم میشد )
![[تصویر: 0000.png]](http://s9.picofile.com/file/8343976468/0000.png)
همونطور که میبینید مقدار ایونت ها تغییری در این دو نسخه نداشته ، و بنده هرچی تونستم بهینه بکنم در اصل به پاس استفاده از عکس های سبک تر بود ، نسخه دوم بازی با عکس های سبک تر ( عدم استفاده از افکت های بیهوده و الکی ) و کلا چیز هایی توی همین دسته ها ... میشه گفت این رقم رو کمتر کردم ، البته بعد از این نسخه ، میخواستم نسخه ای جهت تست به مایکت هم ارسال کنم که جالب تر این بود که توی نسخه مایکت این مقدار به 19.9 رسیده بود . دلیل اینکه توی اون نسخه کمتر شده بود این بود که اومدم به جای استفاده از بک گراند های متفاوت در هر صفحه ( که حدود 20 صفحه بودن ) ، از یک بک گراند اما با صفحات مختلف استفاده کردم ، و البته افکت های نور و چرخش و اینجور چیز هارو توی بحش صفحه اول ( لوگوی بازی ) ، فلش متن لوگوی بازی ، صفحه لود بازی ( دارای افکت های مختلف متن و ... ) و صفحه فروشگاه و خیلی چیز های دیگه رو هم بروز رسانی کردم ، به طوری که برای بهینه سازی مجبور شدم به طور کلی تمامی بخش های این بازی رو تغییر بدم ، از گیم پلی گرفته تا صفحه لودینگ بازی ؛ نکته جالب دیگه اینکه ، من فهمیدم اگر شما به جای ساخت صفحات الکی و بیهوده سعی کنید صفحه لودینگ یک بازی رو در همون صفحه لول بازی بسازید ، در اصل این کار هم پرفرمنس بازی رو افزایش میده اون هم بصورت محسوس ، بعد از این گزینه شما حتی میتونید به جای استفاده از چندین لیوت ، از یک لیوت و چندین ایونت شیت استفاده کنید ، توجه داشته باشید ساخت چند ایونت شیت فقط برای این هست که خودتون هنگام کد نویسی قاطی نکنید ، در غیر اینصورت میشه همه رو توی یک ایونت شیت نوشت .
البته ی چیز خوشحال کننده ای که باید بهتون بگم ، این هست که ایونت ، تعداد وریبل ها ، حتی تعداد وریبل ها و حتی تعداد خیلی زیاد ایونت ها هیچ تاثیری در مقدار memory usage نداره !!!
یعنی memory usage فقط بر اساس آبجکت هایی که درون بازی ایمپورت میکنید محاسبه میشه ، آبجکت هایی که داخل بازی ایمپورت میکنید میتونه همون اسپرایت ها ، بک گراند ها ، افکت ها باشند ، پلاگین هایی که استاندارد هستند عملا مقدار آنچنانی از memory usage رو به خودش اختصاص نمیدن و عملا پلاگین ها مقدار ناچیزی از مموری رو درگیر خودشون میکنن .
برخلاف تصور اشتباه برخی از برنامه نویسان ، پرفرمنس ربطی به صفحه نمایش نداره ، یعنی اگرم تا الان فکر میکردید هرچقدر صفحه نمایش کوچیک تر باشه بهتره یا به عبارتی بازی روون تر میشه باید بگم اشتباه میکردید ، نمیدونمم اینارو کی میگه ولی در کل تو کل زندگیش داره اشتباه میزنه

نکته آخر : ی بازی تا زمانی که روی یک گوشی یا سیستم عامل مخصوص خودش راه اندازی نشه نمیشه درباره پرفرمنس و مقدار استفاده از اف پی اس و سی پی یو و رم ازش صحبت کرد ، حتی کنسول دیباگ در کانستراکت هم نمیتونه به شما برای ساخت یک بازی با پرفرمنس بهتر کمک کنه ، پنل دیباگ کانستراکت بیشتر بدرد همون عیب یابی میخوره ، به این صورت که اگر بخشی ازبازیتون عمل نکرد یا مشکلی داشت بتونید ازش استفاده کنید ، در غیر اینصورت برای پرفرمنس و بهینه سازی نمیشه زیاد ازش کمک گرفت .
موفق و پیروز باشید / حسن ثنایی .