সাধারণভাবে, হ্যাঁ, দুর্বল উল্লেখগুলি ব্যবহার করা উচিত। তবে প্রথমে আমাদের "ইভেন্ট শ্রোতা" বলতে আপনার অর্থ কী তা সম্পর্কে আমাদের পরিষ্কার হতে হবে।
Callbacks
কিছু প্রোগ্রামিং শৈলীতে, বিশেষত অ্যাসিনক্রোনাস অপারেশনের প্রসঙ্গে, কোনও নির্দিষ্ট ইভেন্টে সম্পাদিত হওয়া কলব্যাক হিসাবে গণনার কোনও অংশ উপস্থাপন করা সাধারণ। উদাহরণস্বরূপ, একটি Promise
[ 1 ] এর একটি then
পদ্ধতি থাকতে পারে যা পূর্ববর্তী পদক্ষেপটি শেষ হওয়ার পরে কলব্যাক রেজিস্টার করে:
promise =
Promise.new(async_task) # - kick off a task
.then(value => operation_on(value)) # - queue other operations
.then(value => other_operation(value)) # that get executed on completion
... # do other stuff in the meanwhile
# later:
result = promise.value # block for the result
এখানে, দ্বারা নিবন্ধিত কলব্যাকগুলি then
শক্তিশালী রেফারেন্সগুলি ধরে রাখতে হবে, কারণ প্রতিশ্রুতি (ইভেন্ট উত্স) কলব্যাকের জন্য একটি রেফারেন্স ধারণকারী একমাত্র অবজেক্ট। এটি কোনও সমস্যা নয় কারণ প্রতিশ্রুতি নিজেই একটি সীমিত জীবনকাল রয়েছে এবং প্রতিশ্রুতিগুলির শৃঙ্খলা শেষ হওয়ার পরে এটি আবর্জনা সংগ্রহ করা হবে।
পর্যবেক্ষক প্যাটার্ন
পর্যবেক্ষক প্যাটার্নে কোনও বিষয়ের উপর নির্ভরশীল পর্যবেক্ষকদের একটি তালিকা রয়েছে। বিষয়টি যখন কোনও রাজ্যে প্রবেশ করে তখন পর্যবেক্ষকদের কিছু ইন্টারফেস অনুসারে অবহিত করা হয়। পর্যবেক্ষকরা বিষয়টিতে যুক্ত এবং সরানো যেতে পারে। এই পর্যবেক্ষকগুলির অর্থগত শূন্যতায় বিদ্যমান নেই, তবে কোনও উদ্দেশ্যে ইভেন্টের জন্য অপেক্ষা করছেন।
যদি এই উদ্দেশ্যটির আর অস্তিত্ব না থাকে তবে পর্যবেক্ষকদের বিষয় থেকে সরানো উচিত। এমনকি আবর্জনা-সংগৃহীত ভাষাগুলিতে, এই অপসারণটি ম্যানুয়ালি করা যেতে পারে। আমরা যদি কোনও পর্যবেক্ষককে অপসারণ করতে ব্যর্থ হই তবে পর্যবেক্ষকের কাছে বিষয় থেকে রেফারেন্সের মাধ্যমে এটিকে জীবন্ত রাখা হবে এবং পর্যবেক্ষক উল্লেখ করে এমন সমস্ত বস্তু এটি সহ। এটি মেমরির অপচয় করে এবং কর্মক্ষমতা হ্রাস করে (এখন অকেজো) পর্যবেক্ষককে এখনও অবহিত করা হবে।
দুর্বল উল্লেখগুলি এই মেমরি ফুটো ঠিক করে দেয়, কারণ তারা পর্যবেক্ষককে আবর্জনা সংগ্রহ করার অনুমতি দেয়। যখন বিষয়টি সমস্ত পর্যবেক্ষককে অবহিত করার জন্য যায় এবং দেখা যায় যে কোনও পর্যবেক্ষকের কাছে দুর্বল উল্লেখগুলির মধ্যে একটি শূন্য রয়েছে, সেই উল্লেখটি নিরাপদে সরিয়ে দেওয়া যেতে পারে। বিকল্পভাবে দুর্বল উল্লেখগুলি এমনভাবে প্রয়োগ করা যেতে পারে যা সাবজেক্টটিকে সংগ্রহের পরে পর্যবেক্ষককে সরিয়ে দেবে এমন একটি ক্লিনআপ কলব্যাক নিবন্ধ করার অনুমতি দেয়।
তবে মনে রাখবেন যে দুর্বল উল্লেখগুলি কেবলমাত্র একটি ব্যান্ড-সহায়তা যা কোনও পর্যবেক্ষককে অপসারণ করতে ভুলে ক্ষতির সীমাবদ্ধ করে। সঠিক সমাধান হ'ল নিশ্চিত করা হবে যে কোনও পর্যবেক্ষকের আর প্রয়োজন নেই যখন সরানো হয়েছে। বিকল্পগুলির মধ্যে রয়েছে:
এটি ম্যানুয়ালি করা, তবে এটি ত্রুটিযুক্ত।
জাভাতে বা using
সি # তে সহায়তার সাথে চেষ্টা করার মতো কিছু ব্যবহার করা ।
নির্ধারিত ধ্বংস, যেমন RAII আইডিয়ামের মাধ্যমে। মনে রাখবেন যে নির্জনবাদী আবর্জনা সংগ্রহের ভাষায়, এটি ধ্বংসকারীকে ট্রিগার করার জন্য পর্যবেক্ষকের কাছে বিষয় থেকে দুর্বল উল্লেখের প্রয়োজন হতে পারে।