অব্যবহৃত সম্পদ আসলে কী?


159

আমি পরিচালনা না করা সংস্থান সম্পর্কে জানতে চাই। কেউ দয়া করে আমাকে একটি প্রাথমিক ধারণা দিতে পারেন?


এই পৃষ্ঠাটি দেখুন, যা আইডেস্পোসেসযোগ্যের যথাযথ ব্যবহারের জন্য এবং কীভাবে নিয়ন্ত্রণহীন সম্পদগুলিকে বিবেচনায় আনতে পারে তার জন্য দুর্দান্ত ব্যাখ্যা এবং প্যাটার্ন দেয়: stackoverflow.com/questions/538060/…
কাইল বারান

উত্তর:


177

পরিচালিত সংস্থানসমূহ মূলত "পরিচালিত মেমরি" যা আবর্জনা সংগ্রহকারী দ্বারা পরিচালিত হয়। যখন আপনার আর কোনও পরিচালিত অবজেক্টের (যা পরিচালিত মেমরি ব্যবহার করে) এর জন্য কোনও রেফারেন্স না থাকে, আবর্জনা সংগ্রহকারী (অবশেষে) আপনার জন্য সেই স্মৃতি প্রকাশ করবে।

নিয়ন্ত্রণহীন সংস্থানগুলি তখন আবর্জনা সংগ্রহকারী জানেন না এমন সমস্ত কিছুই। উদাহরণ স্বরূপ:

  • ফাইল খুলুন
  • নেটওয়ার্ক সংযোগগুলি খুলুন
  • নিয়ন্ত্রণহীন স্মৃতি
  • এক্সএনএ-তে: ভার্টেক্স বুফার্স, সূচক বাফার, টেক্সচার ইত্যাদি

সাধারণভাবে আপনি সেই ব্যবস্থাপনিত সংস্থানগুলিকে পরিচালনা করতে অবজেক্টের কাছে থাকা আপনার সমস্ত রেফারেন্স হারিয়ে যাওয়ার আগে আপনাকে মুক্তি দিতে চান । আপনি এই Disposeঅবজেক্টে কল করে বা (সি # তে) usingস্টেটমেন্টটি ব্যবহার করে যা Disposeআপনার জন্য কলিং পরিচালনা করবে ।

যদি আপনি Disposeআপনার নিয়ন্ত্রণহীন সংস্থানসমূহকে সঠিকভাবে অবহেলা করেন তবে অবশেষে আবর্জনা সংগ্রহকারী আপনার জন্য এটি পরিচালনা করবে যখন সেই সংস্থানটি যুক্ত জিনিসটি আবর্জনা সংগ্রহ করা হয় (এটি "চূড়ান্তকরণ")। তবে আবর্জনা সংগ্রাহকরা নিয়ন্ত্রণহীন সম্পদ সম্পর্কে জানেন না, তাই তাদের ছেড়ে দেওয়ার জন্য এটি কতটা খারাপভাবে প্রয়োজন তা বলতে পারে না - সুতরাং আপনার প্রোগ্রামের পক্ষে খারাপ সম্পাদন করা বা সম্পদ পুরোপুরি শেষ হয়ে যাওয়া সম্ভব।

আপনি যদি এমন কোনও শ্রেণি প্রয়োগ করেন যা পরিচালনাহীন সংস্থানগুলিকে পরিচালনা করে তবে তা প্রয়োগ করা Disposeএবং Finalizeসঠিকভাবে করা আপনার পক্ষে ।


7
ওপেন ডাটাবেস সংযোগটি কোন বিভাগের আওতায় আসে? পরিচালিত / পরিচালনাবিহীন?
দেবিপ্রসাদ দাশ

8
+1 অন্যান্য উত্তরগুলি সেই গুরুত্বপূর্ণ পয়েন্টটি মিস করে যা আপনি ডেকেপ্সকে কোনও পরিচালিত অবজেক্টে কল করছেন যা অভ্যন্তরীণভাবে এটি পরিচালনা করে এমন পরিচালনাহীন সংস্থানগুলিকে মুক্ত করে (যেমন ফাইল হ্যান্ডেল, জিডিআই + বিটম্যাপ, ...) এবং যদি আপনি সরাসরি পরিচালনা না করা সংস্থানগুলিতে অ্যাক্সেস করেন ( পিনভোক ইত্যাদি) আপনার এটি পরিচালনা করা দরকার।
ইয়ান Mercer

2
@ দেভ: নিয়ন্ত্রণহীন - যেহেতু জিসি এটি সম্পর্কে জানেন না (ধরে নিই যে আপনি কোনও হাইপোথটিক্যাল ইন-ম্যানেজড মেমরি ডেটাবেস ব্যবহার করছেন না)। তবে সংযোগ অবজেক্টটি নিজেই কোনও নিয়ন্ত্রণহীন সংস্থান রাখতে পারে না। সম্ভবত ডাটাবেস সংযোগটি কোথাও একটি উন্মুক্ত ফাইল বা নেটওয়ার্ক সংযোগ ব্যবহার করে - তবে এটি সম্ভব যে অন্য কোনও অবজেক্ট (সংযোগের বস্তু ব্যতীত) সেই পরিচালনা না করা সংস্থানটি পরিচালনা করছে (সম্ভবত আপনার ডাটাবেস লাইব্রেরি ক্যাশে সংযোগগুলি)। ডকুমেন্টেশন চেক করুন এবং দেখুন যেখানে এটি আপনাকে কল করতে Disposeবা ব্যবহার করতে বলে using
অ্যান্ড্রু রাসেল

11
আমার এ সম্পর্কে একটি প্রাথমিক মন্তব্য / প্রশ্ন আছে, আমি কি কোনও প্রকারটি কেবল টাইপ দ্বারা পরিচালিত / আন-পরিচালিত হিসাবে সম্পর্কিত করতে পারি, উদাহরণস্বরূপ, স্ট্রিংটি পরিচালনা করা হয়, ডেটাসেট আন-পরিচালনা করা হয় (এজন্য এটির ডিসপোজ () পদ্ধতি রয়েছে) , ডেটাবেস সংযোগগুলি আন-ম্যানেজড (কারণ তাদের নিষ্পত্তি হয়েছে) ইত্যাদি So এটি ছাড়াও, এক্সএমএল ডকুমেন্ট অবজেক্টটি কী হবে? ধন্যবাদ
15

15
@ গেন্ডার্স এটি থাম্বের একটি ভাল নিয়ম। যদিও সচেতন থাকুন যে সমস্ত সি # শ্রেণীর দৃষ্টান্তগুলি পরিচালনা করা অবজেক্ট are কোনও শ্রেণীর উদাহরণ যদি পরিচালনা না করা সংস্থান রাখতে পারে , তবে সেই শ্রেণীর প্রয়োগ করা উচিতIDisposable । একটি বর্গ তাহলে নেই বাস্তবায়ন IDisposable, তাহলে আপনি উচিত যে ক্লাসের দৃষ্টান্ত নিষ্পত্তি usingবা Dispose()যখন আপনি তাদের সঙ্গে সম্পন্ন করা হয়। এর ভিত্তিতে, আপনার কথোপকথনটি ধরে রেখেছে: যদি কোনও শ্রেণি প্রয়োগ করে IDisposableতবে সম্ভবত এটি অভ্যন্তরীণভাবে পরিচালনা না করা সংস্থানগুলি রাখে।
অ্যান্ড্রু রাসেল

56

কিছু ব্যবহারকারী পরিচালিত সংস্থাগুলির মধ্যে খোলা ফাইল, ডিবি সংযোগ, বরাদ্দ মেমরি, বিটম্যাপস, ফাইল স্ট্রিম ইত্যাদির র‌্যাঙ্ক করে, অন্যরা যাতে পরিচালনা না করে। সুতরাং তারা পরিচালনা বা পরিচালনা না?

আমার মতামতটি, প্রতিক্রিয়াটি আরও জটিল: আপনি যখন নেট থেকে ফাইল খুলবেন, আপনি সম্ভবত কিছু অন্তর্নির্মিত নেট ক্লাস সিস্টেম.আইও.ফাইলে, ফাইল স্ট্রিম বা অন্য কোনও কিছু ব্যবহার করবেন। কারণ এটি একটি সাধারণ। নেট ক্লাস, এটি পরিচালিত। তবে এটি একটি মোড়ক, যা ভিতরে "নোংরা কাজ" করে (উইন 32 ডিএলএস ব্যবহার করে অপারেটিং সিস্টেমের সাথে যোগাযোগ করে, নিম্ন স্তরের ফাংশনগুলি বা এমনকি এসেম্বলারের নির্দেশাবলী কল করে) যা সত্যই ফাইলটি খোলায়। এবং এটি হ'ল। নেট কোনও ব্যবস্থাপনাহীন, সম্পর্কে জানে না। তবে আপনি সম্ভবত এসেম্বলারের নির্দেশাবলী এবং নেট নেট ফাংশন বাইপাস ব্যবহার করে ফাইলটি খুলতে পারেন। তারপরে হ্যান্ডেল এবং উন্মুক্ত ফাইল হ'ল পরিচালনা ব্যবস্থা নেই resources

ডিবির সাথে একই: আপনি যদি কিছু ডিবি অ্যাসেম্বলি ব্যবহার করেন তবে আপনার ডিবি সংযোগ ইত্যাদির মতো ক্লাস রয়েছে, তারা। নেট এবং পরিচালিত হিসাবে পরিচিত। তবে তারা "নোংরা কাজ" মোড়ানো, যা নিয়ন্ত্রণহীন (সার্ভারে মেমরি বরাদ্দ করুন, এর সাথে সংযোগ স্থাপন করুন, ...)। আপনি যদি এই মোড়কের ক্লাসটি ব্যবহার না করেন এবং কিছু নেটওয়ার্ক সকেট নিজে থেকে খোলেন এবং কিছু কমান্ড ব্যবহার করে আপনার নিজের অদ্ভুত ডাটাবেসের সাথে যোগাযোগ করেন, তবে এটি পরিচালনা করা যায় না।

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

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

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


1
অতিরিক্ত স্বচ্ছতার উপর এটি ভালunmanaged vs managed resources
এখন যার নাম অবশ্যই প্রকাশ করা উচিত নয়।

আপনার উত্তরের জন্য ধন্যবাদ। কোন ক্লাসে সুপারিশ করা হয় যে আমরা বাস্তবে ডিসপোজ কল করি?
বিকেএসপুরজন

2
এটি সহজ। আপনি যে প্রতিটি ক্লাস ব্যবহার করেন তার উপর আপনাকে অবশ্যই যাচাই করতে হবে, এটি আইডিপোজেবল ইন্টারফেস প্রয়োগ করে কিনা। যদি হ্যাঁ, তবে আপনি যদি এই পদ্ধতিটি একটি পদ্ধতিতে ব্যবহার করেন (যেমন: ফাইল খোলার, পাঠ্য সংরক্ষণ, ফাইলটি বন্ধ করে), আপনি এটি ব্যবহার করতে পারেন ()}} প্যাটার্নটি, যা আপনাকে স্বয়ংক্রিয়ভাবে ডিসপোজ বলে calls যদি আপনি এই জাতীয় ক্লাসটি আরও পদ্ধতিতে ব্যবহার করেন (উদাহরণস্বরূপ: আপনার ক্লাসে ফাইল রয়েছে, কনস্ট্রাক্টারে এটি ফাইলটি খোলে, তবে বেশ কয়েকটি পদ্ধতিতে কিছু লগ যুক্ত হয় ...), তবে আপনাকে অবশ্যই আপনার শ্রেণীর দ্বারা আইডিপোজেবল ইন্টারফেস প্রয়োগ করতে হবে, ডিসপোজ / ফাইনালাইজ প্যাটার্ন প্রয়োগ করতে হবে এবং যথাযথভাবে class শ্রেণীর বস্তুটি নিষ্পত্তি করে।
মার্টাস

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

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

12

নিয়ন্ত্রণহীন সম্পদগুলি সেগুলি যা .NET রানটাইম (সিএলআর) এর বাইরে চলতে থাকে (ওরফে নন.এনইটি কোড)) উদাহরণস্বরূপ, উইন 32 এপিআই-তে একটি ডিএলএল-এর কাছে কল, বা সি ++ তে লিখিত .dll এ কল।


6

একটি "অপরিকল্পিত সংস্থান" জিনিস নয়, তবে একটি দায়বদ্ধতা। যদি কোনও বস্তু একটি নিয়ন্ত্রণহীন সংস্থার মালিক হয়, তার অর্থ এই যে (১) এর বাইরে কিছু সত্তা এমনভাবে ম্যানিপুলেটেড করা হয়েছে যা পরিষ্কার না করা হলে সমস্যা দেখা দিতে পারে এবং (২) অবজেক্টটিতে এই ধরনের পরিষ্কার-পরিচ্ছন্নতা সম্পাদনের জন্য প্রয়োজনীয় তথ্য রয়েছে এবং এটি দায়বদ্ধ এটা করার জন্য।

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

কিছু ক্ষেত্রে, বস্তুগুলি সম্ভাব্যতার জন্য ভাতা দেবে এই সম্ভাবনা যে তারা প্রথমে ডিসপোজ না ডেকেই পরিত্যক্ত হতে পারে। জিসি অবজেক্টগুলিকে বিজ্ঞপ্তির অনুরোধ করতে অনুমতি দেয় যে তারা পরিত্যাগ করা হয়েছে (ফাইনালাইজ নামক একটি রুটিন কল করে) এবং অবজেক্টগুলি এই বিজ্ঞপ্তিটি নিজেরাই পরিস্কার করার জন্য ব্যবহার করতে পারে।

"পরিচালিত সংস্থান" এবং "নিয়ন্ত্রণহীন সংস্থান" এর মতো পদগুলি দুর্ভাগ্যক্রমে, বিভিন্ন ব্যক্তি বিভিন্ন জিনিস বোঝাতে ব্যবহার করে; খোলামেলাভাবে মনে করুন যে কোনও ক্লিনআপের দায় না থাকা, ডিসপোজ বলা হলে কেবল যত্ন নেওয়া হবে, অথবা ডিসপোজের মাধ্যমে যত্ন নেওয়া উচিত এমন পরিষ্কার-পরিচ্ছন্নতার দায়িত্ব থাকলেও অবজেক্টের ক্ষেত্রে এটি বিবেচনা করা আরও কার্যকর think ফাইনালাইজ করেও যত্ন নেওয়া উচিত।


5

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

এখান থেকে চুরি , পুরো পোস্ট পড়তে নির্দ্বিধায়।


2

.NET পরিচালিত হিপগুলিতে মেমরি বরাদ্দ করা হয় এমন কোনও সংস্থান হ'ল একটি পরিচালিত সংস্থান। সিএলআর এই ধরণের মেমরি সম্পর্কে পুরোপুরি সচেতন এবং এটি অনাথ না হয়ে যায় তা নিশ্চিত করার জন্য সমস্ত কিছু করবে। অন্য যে কোনও কিছুই নিয়ন্ত্রণহীন। উদাহরণস্বরূপ COM এর সাথে ইন্টারপোপ করা, প্রক্রিয়া স্মৃতি স্পেসে অবজেক্ট তৈরি করতে পারে তবে সিএলআর এটি যত্ন নেবে না। এক্ষেত্রে পরিচালিত সীমানা জুড়ে কল করে এমন পরিচালিত অবজেক্টের এর বাইরে যে কোনও কিছুর জন্য দায়বদ্ধ হওয়া উচিত।


0

আসুন আমরা প্রথমে বুঝতে পারি কীভাবে VB6 বা C ++ প্রোগ্রামগুলি (নন ডটনেট অ্যাপ্লিকেশনগুলি) চালানো হয়েছিল। আমরা জানি যে কম্পিউটারগুলি কেবল মেশিন স্তরের কোড বোঝে। মেশিন লেভেল কোডকে দেশীয় বা বাইনারি কোডও বলা হয়। সুতরাং, যখন আমরা কোনও ভিবি 6 বা সি ++ প্রোগ্রাম চালিত করি তখন সংশ্লিষ্ট ভাষা সংকলক, সংশ্লিষ্ট ভাষার উত্স কোডটি স্থানীয় কোডে সংকলন করে, যা তখন অন্তর্নিহিত অপারেটিং সিস্টেম এবং হার্ডওয়্যার দ্বারা বোঝা যায়।

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

আসুন এখন বুঝতে দিন, একটি নেট প্রোগ্রাম কীভাবে কার্যকর করে। ডটনেট ব্যবহার করে আমরা বিভিন্ন ধরণের অ্যাপ্লিকেশন তৈরি করতে পারি। .NET অ্যাপ্লিকেশনগুলির কয়েকটি সাধারণ ধরণের মধ্যে রয়েছে ওয়েব, উইন্ডোজ, কনসোল এবং মোবাইল অ্যাপ্লিকেশন। অ্যাপ্লিকেশনটির ধরণ নির্বিশেষে আপনি যখন কোনও নেট নেট অ্যাপ্লিকেশন কার্যকর করেন তখন নিম্নলিখিতটি ঘটে থাকে

  1. .NET অ্যাপ্লিকেশনটি ইন্টারমিডিয়েট ল্যাঙ্গুয়েজে (আইএল) সংকলিত হয়। আইএলকে কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (সিআইএল) এবং মাইক্রোসফ্ট ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (এমএসআইএল) হিসাবেও উল্লেখ করা হয়। .NET এবং নন। নেট উভয় অ্যাপ্লিকেশন একটি সমাবেশ উত্পন্ন করে। সমাবেশগুলিতে .DLL বা .EXE এর এক্সটেনশন থাকে। উদাহরণস্বরূপ আপনি যদি উইন্ডোজ বা কনসোল অ্যাপ্লিকেশনটি সংকলন করেন তবে আপনি একটি। NET এবং NON .NET সমাবেশের মধ্যে পার্থক্যটি হ'ল, ডটনেট অ্যাসেম্বলিটি মধ্যবর্তী ভাষা ফর্ম্যাটে যেখানে নন ডটনেট অ্যাসেম্বলি হিসাবে স্থানীয় কোড ফর্ম্যাটে থাকে।

  2. নন ডটনেট অ্যাপ্লিকেশনগুলি সরাসরি অপারেটিং সিস্টেমের শীর্ষে চলতে পারে, যেখানে ডটনেট অ্যাপ্লিকেশনগুলি ভার্চুয়াল পরিবেশের উপরে কমন ল্যাঙ্গুয়েজ রানটাইম (সিএলআর) নামে পরিচিত। সিএলআরতে জাস্ট ইন-টাইম কম্পাইলার (জেআইটি) নামে একটি উপাদান রয়েছে যা অন্তর্বর্তী অপারেটিং সিস্টেমটি বুঝতে পারে যা মধ্যবর্তী ভাষাটিকে স্থানীয় কোডে রূপান্তরিত করে।

সুতরাং, নেট এপ্লিকেশন এক্সিকিউশনটি 2 টি পদক্ষেপ নিয়ে গঠিত 1. ভাষা সংকলক, সোর্স কোডটিকে মধ্যবর্তী ভাষার (আইএল) মধ্যে সংকলন করে २. সিএলআরতে জেআইটি সংকলক, আইএলটিকে স্থানীয় কোডে রূপান্তর করে যা এর পরে অন্তর্নিহিত অপারেটিং সিস্টেমে চালানো যেতে পারে ।

যেহেতু, .NET অ্যাসেম্বলিটি ইন্টারমিডেইট ল্যাঙ্গুয়েজ ফর্ম্যাটে থাকে এবং নেটিভ কোড নয়, তাই নেট প্ল্যাটফর্মগুলি যে কোনও প্ল্যাটফর্মের জন্য বহনযোগ্য, যতক্ষণ না লক্ষ্য প্ল্যাটফর্মটিতে প্রচলিত ভাষা রানটাইম (সিএলআর) থাকে। লক্ষ্য প্ল্যাটফর্মের সিএলআর অন্তর্নিহিত অপারেটিং সিস্টেমটি বুঝতে পারে এমন ইন্টারমিডাইট ভাষাটিকে স্থানীয় কোডে রূপান্তর করে। ইন্টারমিডিয়েট ল্যাঙ্গুয়েজকে ম্যানেজড কোড হিসাবেও ডাকা হয়। এটি সিএলআর কোডটি পরিচালনা করে যা এর ভিতরে চলে। উদাহরণস্বরূপ, একটি ভিবি 6 প্রোগ্রামে, বিকাশকারী কোনও বস্তুর দ্বারা গ্রাহিত মেমরিটিকে ডি-বরাদ্দ করার জন্য দায়বদ্ধ। যদি কোনও প্রোগ্রামার মেমরিটিকে ডি-বরাদ্দ করতে ভুলে যায় তবে আমরা মেমরির ব্যতিক্রমগুলি সনাক্ত করতে কঠোর হতে পারি। অন্যদিকে একটি নেট প্রোগ্রামারকে কোনও বস্তুর দ্বারা গ্রাহিত মেমরিটি ডি-বরাদ্দ সম্পর্কে চিন্তা করার দরকার নেই। স্বয়ংক্রিয় মেমরি পরিচালনা, দখল সংগ্রহ নামেও পরিচিত সিএলআর সরবরাহ করে। পৃথক্, আবর্জনা সংগ্রহ থেকে, সিএলআর দ্বারা প্রদত্ত আরও বেশ কয়েকটি সুবিধা রয়েছে যা আমরা পরবর্তী অধিবেশনটিতে আলোচনা করব। যেহেতু, সিএলআর ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ পরিচালনা ও পরিচালনা করছে, তাই এটিকে (আইএল) পরিচালিত কোড হিসাবেও ডাকা হয়।

.NET সি #, ভিবি, জে #, এবং সি ++ এর মতো বিভিন্ন প্রোগ্রামিং ভাষার সমর্থন করে। সি #, ভিবি এবং জে # কেবলমাত্র পরিচালিত কোড (আইএল) উত্পন্ন করতে পারে, যেখানে সি ++ হিসাবে পরিচালিত কোড (আইএল) এবং আন-পরিচালিত কোড (নেটিভ কোড) উভয়ই উত্পন্ন করতে পারে।

নেটিভ কোডটি স্থায়ীভাবে কোথাও কোথাও সংরক্ষণ করা হয় না, আমরা প্রোগ্রামটি বন্ধ করার পরে নেটিভ কোডটি দূরে ফেলে দেওয়া হয়। আমরা যখন প্রোগ্রামটি আবার চালিত করি, দেশীয় কোডটি আবার উত্পন্ন হয়।

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

এটি এই লিঙ্কটি থেকে সরবরাহ করা হয়েছে - তিনি একজন দুর্দান্ত শিক্ষক। http://csharp-video-tutorials.blogspot.in/2012/07/net-program-execution-part-1.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.