Actionscript 3 ব্যবহার করে একটি বাইটআরেও আনলোড হচ্ছে

আমি কিভাবে অ্যাকশনস্ক্রিপ্ট 3 ব্যবহার করে মেমরি থেকে বাইটআরে জোর করে আনছি?

আমি চেষ্টা করেছি (সাফল্য ছাড়া):

byteArray.length = 0;
byteArray = new ByteArray();

এবং:

for ( var i:int=0; i < byteArray.length; i++ ) {
    byteArray[i] = null;
}
0
যোগ সম্পাদিত
মতামত: 7

7 উত্তর

এই নিবন্ধটি তাকান

http://www.gskinner.com/blog/archives/2006/06 /as3_resource_ma.html

আইএএনএ কর্মক্রিপট প্রোগ্রামার, তবে আমি যে অনুভূতি পেয়েছি সেটা হল, কারণ আপনি যখন এটি চান তখন আবর্জনা সংগ্রাহকটি চলতে পারে না।

Hence http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/

তাই আমি তাদের সংগ্রহ কোড চেষ্টা করার চেষ্টা করুন এবং দেখুন যদি এটি সাহায্য করে

private var gcCount:int;
private function startGCCycle():void{
    gcCount = 0;
    addEventListener(Event.ENTER_FRAME, doGC);
}
private function doGC(evt:Event):void{
    flash.system.System.gc();
    if(++gcCount > 1){
        removeEventListener(Event.ENTER_FRAME, doGC);
        setTimeout(lastGC, 40);
    }
}
private function lastGC():void{
    flash.system.System.gc();
}
0
যোগ

(আমি এই বিষয়ে ইতিবাচক নই, কিন্তু ...)

AS3 একটি অনির্দিষ্ট-ভিত্তিক আবর্জনা সংগ্রহ ব্যবহার করে। এর মানে হল যে অপ্রচলিত মেমরিটি যখনই রানটাইম মনে হয় তখনই মুক্ত হবে (সাধারণত এটি চালানোর কোন কারণ না থাকায় এটি চালানো একটি ব্যয়বহুল অপারেশন হতে পারে)। এটি বেশিরভাগ আধুনিক আবর্জনা সংগৃহীত ভাষা দ্বারা ব্যবহৃত একই পদ্ধতি (যেমন C# এবং Java)।

ধরুন মেমরির কোনও রেফারেন্সই byteArray দ্বারা বা অ্যারের মধ্যে থাকা বস্তুগুলি দ্বারা নির্দেশিত হয়, যেক্ষেত্রে আপনি বাইআউটআরে ঘোষণা করা হয়

আপনি একটি আবর্জনা সংগ্রহ জোরদার করতে পারেন, যদিও আপনি সত্যিই না উচিত। যদি আপনি না করেন, তবে পরীক্ষার জন্য এটি করুন ... যদি আপনি এটিতে উত্পাদন করেন তবে আপনি সাহায্যের চেয়ে অনেক বেশি কার্যকারিতা ক্ষতিগ্রস্ত করবেন।

একটি জিওসি জোর করতে, চেষ্টা করুন (হ্যাঁ, দুবার):

flash.system.System.gc();
flash.system.System.gc();

You can read more here.

0
যোগ

দুর্ভাগ্যবশত যখন এটি ফ্ল্যাশ / অ্যাকশনক্রিপ্ট তে মেমরি পরিচালনার জন্য আসে তখন আপনি যা করতে পারেন তা যথেষ্ট নয়। অ্যাকশনস্ক্রিপ্ট ব্যবহার করা সহজে ডিজাইন করা হয়েছে (তাই তারা লোকেদের মেমরি ব্যবস্থাপনা সম্পর্কে চিন্তা করতে চায় না)

একটি কোড তৈরি করার পরিবর্তে একটি বাইটআরে ভেরিয়েবলটি চেষ্টা করুন।

var byteObject:Object = new Object();

byteObject.byteArray = new ByteArray();

...

//Then when you are finished delete the variable from byteObject
delete byteObject.byteArray;

যেখানে বাইটআরে একটি বাইটঅব্যাগেজ একটি গতিশীল বৈশিষ্ট্য, আপনি তার জন্য বরাদ্দ করা মেমরি মুক্ত করতে পারেন।

0
যোগ

আমি বিশ্বাস করি আপনি নিজের প্রশ্নের উত্তর দিয়েছেন ...

System.totalMemory gives you the total amount of memory being "used", not allocated. It is accurate that your application may only be using 20mb, but it has 5mb that is free for future allocations.

আমি নিশ্চিত নই যে অ্যাডোব ডক্স যেভাবে মেমোরির পরিচালনা করবে তার উপর আলোকপাত করবে ...

0
যোগ

আমি মনে করি না আপনার চিন্তা করতে কিছু আছে। যদি System.totalMemory নিচে না গিয়ে আপনি শিথিল করতে পারেন। এটি খুব ভাল হতে পারে যেটি নতুন মুক্ত স্মৃতি পুনরুদ্ধার করে না (পরের সময় ফ্ল্যাশ প্লেয়ারের প্রত্যাশা আরও মেমরি চাইতে)। অন্য কিছু করার চেষ্টা করুন যা খুব মেমরি জরুরী এবং আমি নিশ্চিত যে ফ্ল্যাশ প্লেয়ারে বরাদ্দ করা মেমরি হ্রাস হবে এবং এর পরিবর্তে অন্য প্রক্রিয়ায় ব্যবহার করা হবে।

আমি বুঝতে পেরেছি যে, আধুনিক ওএসের মেমরি ম্যানেজমেন্ট প্রত্যেক প্রক্রিয়ায় বরাদ্দকৃত পরিমাণ, অথবা এমনকি বরাদ্দকৃত মোট পরিমাণের দিকে দৃষ্টিপাতের দৃষ্টিকোণ থেকে স্বজ্ঞাত নয়। আমি 5 মিনিটের জন্য আমার ম্যাক ব্যবহার করেছি যখন আমার 3 গিগাবাইট RAM এর 95% ব্যবহার করা হয়, এবং এটি যেভাবেই থাকবে, এটি কখনোই নেমে যাবে না। ওএস মেমরি হ্যান্ডেল যে ঠিক উপায় যতদিন এটি অন্য কোথাও প্রয়োজন হয় না ততক্ষণ পর্যন্ত এমন প্রক্রিয়াগুলি যেগুলি তাদের কাছে মেমরি বরাদ্দ করা হয়েছে (এইগুলি পরবর্তী সময়ে দ্রুত চালু করতে পারে)।

0
যোগ

সুতরাং, যদি আমি মাইএসকিউএল থেকে 20 এমএম বলি, তাহলে টাস্ক ম্যানেজারের মধ্যে অ্যাপ্লিকেশনের জন্য RAM প্রায় 25MB এর বেশি হয়। তারপর যখন আমি সংযোগ বন্ধ করে এবং ByteArray নিষ্পত্তি করার চেষ্টা করে, তখনও RAM মুক্ত হয় না। যাইহোক, যদি আমি System.totalMemory ব্যবহার করি, ফ্ল্যাশ প্লেয়ার দেখায় যে মেমরিটি মুক্তি হচ্ছে, যা কোনও ক্ষেত্রে নয়।

     

কি ফ্ল্যাশ প্লেয়ারটি কি জাভা এবং কিছু গ্যাপ স্পেস সংরক্ষণ করছে এবং অ্যাপটি ছাড় না পর্যন্ত এটি প্রকাশ করছে না?

হ্যাঁ হ্যাঁ এবং না, আপনি অগণিত ব্লগপোস্ট থেকে পড়তে পারে যেমন AVM2 মধ্যে জি সি আশাবাদী এবং এটি নিজের রহস্যময় উপায় কাজ করবে। তাই এটি জাভা মত একটি বিট কাজ করে এবং গ্যাপ স্পেস রিজার্ভ করার চেষ্টা করে, তবে যদি আপনি এটি দীর্ঘ যথেষ্ট এবং কিছু গুরুত্বপূর্ণ মেমরি গ্রাস হয় যে অন্যান্য অপারেশন শুরু করা শুরু করে যে আগের স্থান মুক্ত হবে। আপনার অ্যাপের উপরে চলমান কিছু পরীক্ষার সাথে আপনি এটির মাধ্যমে প্রফেলার ব্যবহার করতে পারেন।

0
যোগ