আমি পরিচালনা না করা সংস্থান সম্পর্কে জানতে চাই। কেউ দয়া করে আমাকে একটি প্রাথমিক ধারণা দিতে পারেন?
আমি পরিচালনা না করা সংস্থান সম্পর্কে জানতে চাই। কেউ দয়া করে আমাকে একটি প্রাথমিক ধারণা দিতে পারেন?
উত্তর:
পরিচালিত সংস্থানসমূহ মূলত "পরিচালিত মেমরি" যা আবর্জনা সংগ্রহকারী দ্বারা পরিচালিত হয়। যখন আপনার আর কোনও পরিচালিত অবজেক্টের (যা পরিচালিত মেমরি ব্যবহার করে) এর জন্য কোনও রেফারেন্স না থাকে, আবর্জনা সংগ্রহকারী (অবশেষে) আপনার জন্য সেই স্মৃতি প্রকাশ করবে।
নিয়ন্ত্রণহীন সংস্থানগুলি তখন আবর্জনা সংগ্রহকারী জানেন না এমন সমস্ত কিছুই। উদাহরণ স্বরূপ:
সাধারণভাবে আপনি সেই ব্যবস্থাপনিত সংস্থানগুলিকে পরিচালনা করতে অবজেক্টের কাছে থাকা আপনার সমস্ত রেফারেন্স হারিয়ে যাওয়ার আগে আপনাকে মুক্তি দিতে চান । আপনি এই Dispose
অবজেক্টে কল করে বা (সি # তে) using
স্টেটমেন্টটি ব্যবহার করে যা Dispose
আপনার জন্য কলিং পরিচালনা করবে ।
যদি আপনি Dispose
আপনার নিয়ন্ত্রণহীন সংস্থানসমূহকে সঠিকভাবে অবহেলা করেন তবে অবশেষে আবর্জনা সংগ্রহকারী আপনার জন্য এটি পরিচালনা করবে যখন সেই সংস্থানটি যুক্ত জিনিসটি আবর্জনা সংগ্রহ করা হয় (এটি "চূড়ান্তকরণ")। তবে আবর্জনা সংগ্রাহকরা নিয়ন্ত্রণহীন সম্পদ সম্পর্কে জানেন না, তাই তাদের ছেড়ে দেওয়ার জন্য এটি কতটা খারাপভাবে প্রয়োজন তা বলতে পারে না - সুতরাং আপনার প্রোগ্রামের পক্ষে খারাপ সম্পাদন করা বা সম্পদ পুরোপুরি শেষ হয়ে যাওয়া সম্ভব।
আপনি যদি এমন কোনও শ্রেণি প্রয়োগ করেন যা পরিচালনাহীন সংস্থানগুলিকে পরিচালনা করে তবে তা প্রয়োগ করা Dispose
এবং Finalize
সঠিকভাবে করা আপনার পক্ষে ।
Dispose
বা ব্যবহার করতে বলে using
।
IDisposable
। একটি বর্গ তাহলে নেই বাস্তবায়ন IDisposable
, তাহলে আপনি উচিত যে ক্লাসের দৃষ্টান্ত নিষ্পত্তি using
বা Dispose()
যখন আপনি তাদের সঙ্গে সম্পন্ন করা হয়। এর ভিত্তিতে, আপনার কথোপকথনটি ধরে রেখেছে: যদি কোনও শ্রেণি প্রয়োগ করে IDisposable
তবে সম্ভবত এটি অভ্যন্তরীণভাবে পরিচালনা না করা সংস্থানগুলি রাখে।
কিছু ব্যবহারকারী পরিচালিত সংস্থাগুলির মধ্যে খোলা ফাইল, ডিবি সংযোগ, বরাদ্দ মেমরি, বিটম্যাপস, ফাইল স্ট্রিম ইত্যাদির র্যাঙ্ক করে, অন্যরা যাতে পরিচালনা না করে। সুতরাং তারা পরিচালনা বা পরিচালনা না?
আমার মতামতটি, প্রতিক্রিয়াটি আরও জটিল: আপনি যখন নেট থেকে ফাইল খুলবেন, আপনি সম্ভবত কিছু অন্তর্নির্মিত নেট ক্লাস সিস্টেম.আইও.ফাইলে, ফাইল স্ট্রিম বা অন্য কোনও কিছু ব্যবহার করবেন। কারণ এটি একটি সাধারণ। নেট ক্লাস, এটি পরিচালিত। তবে এটি একটি মোড়ক, যা ভিতরে "নোংরা কাজ" করে (উইন 32 ডিএলএস ব্যবহার করে অপারেটিং সিস্টেমের সাথে যোগাযোগ করে, নিম্ন স্তরের ফাংশনগুলি বা এমনকি এসেম্বলারের নির্দেশাবলী কল করে) যা সত্যই ফাইলটি খোলায়। এবং এটি হ'ল। নেট কোনও ব্যবস্থাপনাহীন, সম্পর্কে জানে না। তবে আপনি সম্ভবত এসেম্বলারের নির্দেশাবলী এবং নেট নেট ফাংশন বাইপাস ব্যবহার করে ফাইলটি খুলতে পারেন। তারপরে হ্যান্ডেল এবং উন্মুক্ত ফাইল হ'ল পরিচালনা ব্যবস্থা নেই resources
ডিবির সাথে একই: আপনি যদি কিছু ডিবি অ্যাসেম্বলি ব্যবহার করেন তবে আপনার ডিবি সংযোগ ইত্যাদির মতো ক্লাস রয়েছে, তারা। নেট এবং পরিচালিত হিসাবে পরিচিত। তবে তারা "নোংরা কাজ" মোড়ানো, যা নিয়ন্ত্রণহীন (সার্ভারে মেমরি বরাদ্দ করুন, এর সাথে সংযোগ স্থাপন করুন, ...)। আপনি যদি এই মোড়কের ক্লাসটি ব্যবহার না করেন এবং কিছু নেটওয়ার্ক সকেট নিজে থেকে খোলেন এবং কিছু কমান্ড ব্যবহার করে আপনার নিজের অদ্ভুত ডাটাবেসের সাথে যোগাযোগ করেন, তবে এটি পরিচালনা করা যায় না।
এই মোড়কের ক্লাসগুলি (ফাইল, ডিবি সংযোগ ইত্যাদি) পরিচালিত হয়, তবে তারা অভ্যন্তরীণভাবে আপনার মত একইরকম অপরিকল্পিত সংস্থান ব্যবহার করে, যদি আপনি নিজে মুদ্রাগুলি ব্যবহার না করেন এবং "নোংরা কাজ" করেন না। এবং তাই এই মোড়কগুলি নিষ্পত্তি / চূড়ান্তকরণের নিদর্শনগুলি বাস্তবায়ন করে। প্রোগ্রামারকে যখন আর মোড়কের দরকার নেই তখন নিয়ন্ত্রণহীন সংস্থানগুলি ছেড়ে দেওয়ার অনুমতি দেওয়া এবং যখন মোড়ক আবর্জনা সংগ্রহ করা হয় তখন তাদের ছেড়ে দেওয়া তাদের দায়িত্ব। আবরণ সঠিকভাবে আবর্জনা সংগ্রহকারী দ্বারা আবর্জনা সংগ্রহ করা হবে, তবে অভ্যন্তরীণ অপরিশোধিত সম্পদগুলি ডিসপোজ / ফাইনালাইজ প্যাটার্নটি ব্যবহার করে সংগ্রহ করা হবে।
আপনি যদি নিজের ক্লাসে অন্তর্নির্মিত। নেট বা তৃতীয় পক্ষের মোড়ক ক্লাস এবং কিছু সংঘবদ্ধ নির্দেশাবলী ইত্যাদি দ্বারা ফাইলগুলি না খোলেন তবে এই খোলা ফাইলগুলি পরিচালনা করা যায় না এবং আপনাকে নিষ্পত্তি / চূড়ান্তকরণের প্যাটার্ন প্রয়োগ করতে হবে। আপনি যদি এটি না করেন তবে মেমরি ফুটো, চিরকালের জন্য লক হওয়া উত্স ইত্যাদি থাকবে যখন আপনি এটি আর ব্যবহার করবেন না তখনও (ফাইল অপারেশন সম্পূর্ণ) অথবা আপনার আবেদন শেষ হওয়ার পরেও।
তবে আপনার দায়বদ্ধতা হ'ল এই মোড়ক ব্যবহার করার সময়। যাঁরা, নিষ্পত্তি / চূড়ান্তকরণ (আপনি তাদের স্বীকৃতি দিন যে তারা আইডেস্পোজেবল বাস্তবায়ন করে) কার্যকর করেন, তাদের নিষ্পত্তি / চূড়ান্তকরণের প্যাটার্নও বাস্তবায়ন করুন এবং এই মোড়কগুলিও নিষ্পত্তি করুন বা তাদের নিয়ন্ত্রণহীন সংস্থানগুলি ছাড়ার জন্য সংকেত দিন। আপনি যদি তা না করেন তবে রিসোর্সগুলি প্রকাশিত অনির্দিষ্ট সময়ের পরে হবে তবে এটি অবিলম্বে প্রকাশ করা পরিষ্কার (তত্ক্ষণাত ফাইলটি বন্ধ করুন এবং এটিকে উন্মুক্ত না রেখে এবং এলোমেলোভাবে কয়েক মিনিট / ঘন্টা অবরুদ্ধ রাখবেন)। সুতরাং আপনার শ্রেণীর নিষ্পত্তি পদ্ধতিতে আপনি আপনার ব্যবহৃত সমস্ত র্যাপারগুলির ডিসপোজ পদ্ধতিগুলি কল করেন।
unmanaged vs managed resources
একটি "অপরিকল্পিত সংস্থান" জিনিস নয়, তবে একটি দায়বদ্ধতা। যদি কোনও বস্তু একটি নিয়ন্ত্রণহীন সংস্থার মালিক হয়, তার অর্থ এই যে (১) এর বাইরে কিছু সত্তা এমনভাবে ম্যানিপুলেটেড করা হয়েছে যা পরিষ্কার না করা হলে সমস্যা দেখা দিতে পারে এবং (২) অবজেক্টটিতে এই ধরনের পরিষ্কার-পরিচ্ছন্নতা সম্পাদনের জন্য প্রয়োজনীয় তথ্য রয়েছে এবং এটি দায়বদ্ধ এটা করার জন্য।
যদিও বিভিন্ন ধরণের অপরিকল্পিত সংস্থানগুলি বিভিন্ন ধরণের অপারেটিং-সিস্টেম সত্ত্বার (ফাইল, জিডিআই হ্যান্ডলগুলি, বরাদ্দকৃত মেমরি ব্লক ইত্যাদির) সাথে খুব দৃ associated়ভাবে জড়িত রয়েছে এমন কোনও একক সত্তা নেই যা দায়বদ্ধতা ব্যতীত অন্য সকলের দ্বারা ভাগ করা আছে পরিষ্কার কর. সাধারণত, যদি কোনও জিনিসের হয় পরিষ্কার-পরিচ্ছন্নতার দায়িত্ব পালন করা হয়, তবে এটির একটি ডিসপোজ পদ্ধতি থাকবে যা এটির জন্য সমস্ত ধরণের পরিষ্কার-পরিচ্ছন্নতা পরিচালনার জন্য নির্দেশ দেয়।
কিছু ক্ষেত্রে, বস্তুগুলি সম্ভাব্যতার জন্য ভাতা দেবে এই সম্ভাবনা যে তারা প্রথমে ডিসপোজ না ডেকেই পরিত্যক্ত হতে পারে। জিসি অবজেক্টগুলিকে বিজ্ঞপ্তির অনুরোধ করতে অনুমতি দেয় যে তারা পরিত্যাগ করা হয়েছে (ফাইনালাইজ নামক একটি রুটিন কল করে) এবং অবজেক্টগুলি এই বিজ্ঞপ্তিটি নিজেরাই পরিস্কার করার জন্য ব্যবহার করতে পারে।
"পরিচালিত সংস্থান" এবং "নিয়ন্ত্রণহীন সংস্থান" এর মতো পদগুলি দুর্ভাগ্যক্রমে, বিভিন্ন ব্যক্তি বিভিন্ন জিনিস বোঝাতে ব্যবহার করে; খোলামেলাভাবে মনে করুন যে কোনও ক্লিনআপের দায় না থাকা, ডিসপোজ বলা হলে কেবল যত্ন নেওয়া হবে, অথবা ডিসপোজের মাধ্যমে যত্ন নেওয়া উচিত এমন পরিষ্কার-পরিচ্ছন্নতার দায়িত্ব থাকলেও অবজেক্টের ক্ষেত্রে এটি বিবেচনা করা আরও কার্যকর think ফাইনালাইজ করেও যত্ন নেওয়া উচিত।
পরিচালিত এবং নিয়ন্ত্রণহীন সংস্থানগুলির মধ্যে মূল পার্থক্য হ'ল আবর্জনা সংগ্রহকারী সমস্ত পরিচালিত সংস্থান সম্পর্কে জানে, কোনও এক সময় জিসি উপস্থিত হবে এবং একটি পরিচালিত অবজেক্টের সাথে সম্পর্কিত সমস্ত স্মৃতি এবং সংস্থান পরিষ্কার করবে। জিসি ফাইল, স্ট্রিম এবং হ্যান্ডলগুলির মতো পরিচালনা না করা রিসোর্সগুলি সম্পর্কে জানে না, তাই আপনি যদি আপনার কোডটিতে এগুলি স্পষ্টভাবে পরিষ্কার না করেন তবে আপনার মেমরি ফাঁস এবং লক হওয়া সংস্থানগুলি শেষ হবে।
এখান থেকে চুরি , পুরো পোস্ট পড়তে নির্দ্বিধায়।
.NET পরিচালিত হিপগুলিতে মেমরি বরাদ্দ করা হয় এমন কোনও সংস্থান হ'ল একটি পরিচালিত সংস্থান। সিএলআর এই ধরণের মেমরি সম্পর্কে পুরোপুরি সচেতন এবং এটি অনাথ না হয়ে যায় তা নিশ্চিত করার জন্য সমস্ত কিছু করবে। অন্য যে কোনও কিছুই নিয়ন্ত্রণহীন। উদাহরণস্বরূপ COM এর সাথে ইন্টারপোপ করা, প্রক্রিয়া স্মৃতি স্পেসে অবজেক্ট তৈরি করতে পারে তবে সিএলআর এটি যত্ন নেবে না। এক্ষেত্রে পরিচালিত সীমানা জুড়ে কল করে এমন পরিচালিত অবজেক্টের এর বাইরে যে কোনও কিছুর জন্য দায়বদ্ধ হওয়া উচিত।
আসুন আমরা প্রথমে বুঝতে পারি কীভাবে VB6 বা C ++ প্রোগ্রামগুলি (নন ডটনেট অ্যাপ্লিকেশনগুলি) চালানো হয়েছিল। আমরা জানি যে কম্পিউটারগুলি কেবল মেশিন স্তরের কোড বোঝে। মেশিন লেভেল কোডকে দেশীয় বা বাইনারি কোডও বলা হয়। সুতরাং, যখন আমরা কোনও ভিবি 6 বা সি ++ প্রোগ্রাম চালিত করি তখন সংশ্লিষ্ট ভাষা সংকলক, সংশ্লিষ্ট ভাষার উত্স কোডটি স্থানীয় কোডে সংকলন করে, যা তখন অন্তর্নিহিত অপারেটিং সিস্টেম এবং হার্ডওয়্যার দ্বারা বোঝা যায়।
নেটিভ কোড (পরিচালনা না করা কোড) অপারেটিং সিস্টেমের জন্য নির্দিষ্ট (স্থানীয়) যা এটি উত্পন্ন হয়। আপনি যদি এই সংকলিত নেটিভ কোডটি নেন এবং অন্য অপারেটিং সিস্টেমে চালানোর চেষ্টা করেন তবে এটি ব্যর্থ হবে। সুতরাং প্রোগ্রাম কার্যকর করার এই স্টাইলের সাথে সমস্যাটি হ'ল, এটি এক প্ল্যাটফর্ম থেকে অন্য প্ল্যাটফর্মের কাছে পোর্টেবল নয়।
আসুন এখন বুঝতে দিন, একটি নেট প্রোগ্রাম কীভাবে কার্যকর করে। ডটনেট ব্যবহার করে আমরা বিভিন্ন ধরণের অ্যাপ্লিকেশন তৈরি করতে পারি। .NET অ্যাপ্লিকেশনগুলির কয়েকটি সাধারণ ধরণের মধ্যে রয়েছে ওয়েব, উইন্ডোজ, কনসোল এবং মোবাইল অ্যাপ্লিকেশন। অ্যাপ্লিকেশনটির ধরণ নির্বিশেষে আপনি যখন কোনও নেট নেট অ্যাপ্লিকেশন কার্যকর করেন তখন নিম্নলিখিতটি ঘটে থাকে
.NET অ্যাপ্লিকেশনটি ইন্টারমিডিয়েট ল্যাঙ্গুয়েজে (আইএল) সংকলিত হয়। আইএলকে কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (সিআইএল) এবং মাইক্রোসফ্ট ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (এমএসআইএল) হিসাবেও উল্লেখ করা হয়। .NET এবং নন। নেট উভয় অ্যাপ্লিকেশন একটি সমাবেশ উত্পন্ন করে। সমাবেশগুলিতে .DLL বা .EXE এর এক্সটেনশন থাকে। উদাহরণস্বরূপ আপনি যদি উইন্ডোজ বা কনসোল অ্যাপ্লিকেশনটি সংকলন করেন তবে আপনি একটি। NET এবং NON .NET সমাবেশের মধ্যে পার্থক্যটি হ'ল, ডটনেট অ্যাসেম্বলিটি মধ্যবর্তী ভাষা ফর্ম্যাটে যেখানে নন ডটনেট অ্যাসেম্বলি হিসাবে স্থানীয় কোড ফর্ম্যাটে থাকে।
নন ডটনেট অ্যাপ্লিকেশনগুলি সরাসরি অপারেটিং সিস্টেমের শীর্ষে চলতে পারে, যেখানে ডটনেট অ্যাপ্লিকেশনগুলি ভার্চুয়াল পরিবেশের উপরে কমন ল্যাঙ্গুয়েজ রানটাইম (সিএলআর) নামে পরিচিত। সিএলআরতে জাস্ট ইন-টাইম কম্পাইলার (জেআইটি) নামে একটি উপাদান রয়েছে যা অন্তর্বর্তী অপারেটিং সিস্টেমটি বুঝতে পারে যা মধ্যবর্তী ভাষাটিকে স্থানীয় কোডে রূপান্তরিত করে।
সুতরাং, নেট এপ্লিকেশন এক্সিকিউশনটি 2 টি পদক্ষেপ নিয়ে গঠিত 1. ভাষা সংকলক, সোর্স কোডটিকে মধ্যবর্তী ভাষার (আইএল) মধ্যে সংকলন করে २. সিএলআরতে জেআইটি সংকলক, আইএলটিকে স্থানীয় কোডে রূপান্তর করে যা এর পরে অন্তর্নিহিত অপারেটিং সিস্টেমে চালানো যেতে পারে ।
যেহেতু, .NET অ্যাসেম্বলিটি ইন্টারমিডেইট ল্যাঙ্গুয়েজ ফর্ম্যাটে থাকে এবং নেটিভ কোড নয়, তাই নেট প্ল্যাটফর্মগুলি যে কোনও প্ল্যাটফর্মের জন্য বহনযোগ্য, যতক্ষণ না লক্ষ্য প্ল্যাটফর্মটিতে প্রচলিত ভাষা রানটাইম (সিএলআর) থাকে। লক্ষ্য প্ল্যাটফর্মের সিএলআর অন্তর্নিহিত অপারেটিং সিস্টেমটি বুঝতে পারে এমন ইন্টারমিডাইট ভাষাটিকে স্থানীয় কোডে রূপান্তর করে। ইন্টারমিডিয়েট ল্যাঙ্গুয়েজকে ম্যানেজড কোড হিসাবেও ডাকা হয়। এটি সিএলআর কোডটি পরিচালনা করে যা এর ভিতরে চলে। উদাহরণস্বরূপ, একটি ভিবি 6 প্রোগ্রামে, বিকাশকারী কোনও বস্তুর দ্বারা গ্রাহিত মেমরিটিকে ডি-বরাদ্দ করার জন্য দায়বদ্ধ। যদি কোনও প্রোগ্রামার মেমরিটিকে ডি-বরাদ্দ করতে ভুলে যায় তবে আমরা মেমরির ব্যতিক্রমগুলি সনাক্ত করতে কঠোর হতে পারি। অন্যদিকে একটি নেট প্রোগ্রামারকে কোনও বস্তুর দ্বারা গ্রাহিত মেমরিটি ডি-বরাদ্দ সম্পর্কে চিন্তা করার দরকার নেই। স্বয়ংক্রিয় মেমরি পরিচালনা, দখল সংগ্রহ নামেও পরিচিত সিএলআর সরবরাহ করে। পৃথক্, আবর্জনা সংগ্রহ থেকে, সিএলআর দ্বারা প্রদত্ত আরও বেশ কয়েকটি সুবিধা রয়েছে যা আমরা পরবর্তী অধিবেশনটিতে আলোচনা করব। যেহেতু, সিএলআর ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ পরিচালনা ও পরিচালনা করছে, তাই এটিকে (আইএল) পরিচালিত কোড হিসাবেও ডাকা হয়।
.NET সি #, ভিবি, জে #, এবং সি ++ এর মতো বিভিন্ন প্রোগ্রামিং ভাষার সমর্থন করে। সি #, ভিবি এবং জে # কেবলমাত্র পরিচালিত কোড (আইএল) উত্পন্ন করতে পারে, যেখানে সি ++ হিসাবে পরিচালিত কোড (আইএল) এবং আন-পরিচালিত কোড (নেটিভ কোড) উভয়ই উত্পন্ন করতে পারে।
নেটিভ কোডটি স্থায়ীভাবে কোথাও কোথাও সংরক্ষণ করা হয় না, আমরা প্রোগ্রামটি বন্ধ করার পরে নেটিভ কোডটি দূরে ফেলে দেওয়া হয়। আমরা যখন প্রোগ্রামটি আবার চালিত করি, দেশীয় কোডটি আবার উত্পন্ন হয়।
.NET প্রোগ্রাম জাভা প্রোগ্রাম কার্যকর করার অনুরূপ। জাভাতে আমাদের বাইট কোড এবং জেভিএম (জাভা ভার্চুয়াল মেশিন) রয়েছে, যেখানে .NET হিসাবে আমরা অন্তর্বর্তী ভাষা এবং সিএলআর (প্রচলিত ভাষা রানটাইম)
এটি এই লিঙ্কটি থেকে সরবরাহ করা হয়েছে - তিনি একজন দুর্দান্ত শিক্ষক। http://csharp-video-tutorials.blogspot.in/2012/07/net-program-execution-part-1.html