আপডেট (ডিসেম্বর 1, 2009):
আমি এই উত্তরটি সংশোধন করে স্বীকার করতে চাই যে মূল উত্তরটি ত্রুটিযুক্ত ছিল।
মূল বিশ্লেষণ করে যে বস্তু চূড়ান্ত প্রয়োজন প্রয়োগ - এবং পয়েন্ট যে চর্চা একটি সঠিক, ইন গভীরতার বুঝতে এখনও ঘোরা ছাড়া পৃষ্ঠের উপর স্বীকার করা উচিত।
তবে, দেখা যাচ্ছে যে ডেটাসেটস, ডেটাভিউস, ডেটা টেবিলগুলি তাদের নির্মাতাদের চূড়ান্তকরণ দমন করে - এই কারণেই তাদের উপর ডিসপোজ () কল করা সুস্পষ্টভাবে কিছুই করে না।
সম্ভবতঃ এগুলি ঘটে কারণ তাদের নিয়ন্ত্রণহীন সংস্থান নেই; সুতরাং মার্শালবাইভ্যালিউ কম্পোনেন্টটি নিয়ন্ত্রিত সংস্থাগুলির জন্য ভাতা দেয় এ সত্ত্বেও , এই বিশেষ বাস্তবায়নগুলির প্রয়োজন হয় না এবং তাই চূড়ান্তকরণ এড়াতে পারে।
(এটি। নেট লেখকরা সাধারণত যে ধরণের সাধারণত সবচেয়ে বেশি স্মৃতি দখল করে থাকেন তার চূড়ান্তকরণকে দমন করার বিষয়ে যত্ন নেবেন চূড়ান্ত আকারে সাধারণভাবে এই অনুশীলনের গুরুত্বকে বোঝায়))
তা সত্ত্বেও, এই বিশদগুলি এখনও .NET ফ্রেমওয়ার্ক (প্রায় 8 বছর আগে) প্রতিষ্ঠার পর থেকে আন্ডার-ডকুমেন্টেড হয়েছে বিস্ময়কর (আপনি মূলত আপনার নিজের ডিভাইসগুলিকে বিবাদযুক্ত যদিও চালিত করার জন্য রেখে গেছেন, টুকরো টুকরোটি একসাথে রাখার জন্য সময়ে সময়ে হতাশাব্যঞ্জক হয় তবে আমরা প্রতিদিনের উপর নির্ভর করে কাঠামোর আরও সম্পূর্ণ বোঝাপড়া সরবরাহ করি)।
প্রচুর পড়ার পরে, আমার বোঝার বিষয়টি এখানে:
একটি বস্তু চূড়ান্ত প্রয়োজন হলে পারে মেমরির আর ব্যাপৃত তুলনায় এটি এর প্রয়োজন - এখানে কেন: ক) কোনো প্রকার করে একটি বিনাশকারী বা যে ধরনের সংজ্ঞায়িত করে তা একটা বিনাশকারী) finalizable বিবেচনা করা হয় থেকে সংজ্ঞায়িত (উত্তরাধিকারী; খ) বরাদ্দকরণে (কনস্ট্রাক্টর চলার আগে), চূড়ান্তকরণের সারিতে একটি পয়েন্টার স্থাপন করা হয়; গ) একটি চূড়ান্তযোগ্য অবজেক্টের সাধারণত 2 সংগ্রহ সংগ্রহ করতে হয় (মান 1 এর পরিবর্তে); ঘ) চূড়ান্তকরণকে দমন করা চূড়ান্তকরণের সারি থেকে কোনও বস্তু সরিয়ে দেয় না (এসওএসে FinalizeQueue হিসাবে রিপোর্ট করা হয়েছে) এই আদেশটি বিভ্রান্তিকর; চূড়ান্তকরণের সারিতে কী কী জিনিস রয়েছে তা জেনে রাখা (নিজেই এবং এর মধ্যে) সহায়ক নয়; চূড়ান্তকরণের সারিতে কী কী জিনিস রয়েছে এবং এখনও চূড়ান্তকরণের প্রয়োজন তা জেনে রাখা সহায়ক হবে (এর জন্য কোনও আদেশ আছে কি?)
চূড়ান্তকরণকে দমন করা অবজেক্টের শিরোনামটিতে রানটাইমের ইঙ্গিত দেয় যে এটির ফাইনালাইজারটি চাওয়ার দরকার নেই (FReachable সারিটি সরানোর দরকার নেই) ইঙ্গিত করে; এটি চূড়ান্তকরণের সারিতে রয়ে গেছে (এবং এসওএসে FinalizeQueue এর দ্বারা রিপোর্ট করা অবিরত)
ডেটা টেবিল, ডেটাসেট, ডেটাভিউ ক্লাসগুলি সমস্তই মার্শালবাইভ্যাল্প কম্পোনেন্টে মূলযুক্ত, এটি একটি চূড়ান্তযোগ্য অবজেক্ট যা (সম্ভাব্য) অনিয়ন্ত্রিত সংস্থানগুলি পরিচালনা করতে পারে
- যেহেতু ডেটা টেবিল, ডেটাসেট, ডেটাভিউ অপরিকল্পিত সংস্থানসমূহ প্রবর্তন করে না, তারা তাদের নির্মাণকারীগুলিতে চূড়ান্তকরণ দমন করে
- যদিও এটি একটি অস্বাভাবিক নিদর্শন, এটি কল করার পরে ব্যবহারের পরে ডিসপোজ কল করার বিষয়ে চিন্তাভাবনা থেকে মুক্তি দেয়
- এটি এবং এই তথ্যটি যে সম্ভাব্যভাবে বিভিন্ন ডেটাসেটগুলিতে ডেটা টেবিলগুলি ভাগ করা যায়, সম্ভবত ডেটাসেটগুলি শিশু ডেটা টেবিলগুলি নিষ্পত্তি করতে পাত্তা দেয় না is
- এর অর্থ হ'ল এই বিষয়গুলি SOS- এ FinalizeQueue এর অধীন প্রদর্শিত হবে
- যাইহোক, এই অবজেক্টগুলি তাদের অ-চূড়ান্ত অযোগ্য অংশগুলির মতো একক সংগ্রহের পরেও পুনরুদ্ধারযোগ্য হওয়া উচিত
4 (নতুন তথ্যসূত্র):
আসল উত্তর:
এ সম্পর্কে প্রচুর বিভ্রান্তিমূলক এবং সাধারণত খুব দুর্বল উত্তর রয়েছে - যে কেউ এখানে অবতরণ করেছে তাদের আওয়াজ উপেক্ষা করা উচিত এবং নীচের উল্লেখগুলি সাবধানতার সাথে পড়তে হবে।
কোনও সন্দেহ ছাড়াই, যেকোন চূড়ান্তকরণযোগ্য অবজেক্টের জন্য নিষ্পত্তি করা উচিত ।
DataTables হয় Finalizable।
কল করা ডিসপোজ উল্লেখযোগ্যভাবে মেমরি পুনরুদ্ধার গতি।
মার্শালবাইভ্যালিউ কম্পোনেন্টটি তার ডিসপোজ () এ জিসি.সপ্রেসফাইনালাইজকে (এটি) কল করে - এড়িয়ে যাওয়া মানে স্মৃতি পুনরুদ্ধারের আগে কয়েকশো জেন0 সংগ্রহ না হলে কয়েক ডজন অপেক্ষা করতে হবে:
চূড়ান্তকরণের এই প্রাথমিক বোঝার সাথে আমরা ইতিমধ্যে কয়েকটি খুব গুরুত্বপূর্ণ বিষয়টি কমাতে পারি:
প্রথমত, চূড়ান্তকরণের প্রয়োজন এমন বস্তুগুলি না এমন বস্তুর চেয়ে দীর্ঘায়িত হয়। আসলে, তারা অনেক বেশি বাঁচতে পারে। উদাহরণস্বরূপ, ধরুন জেন 2-তে থাকা কোনও অবজেক্টটি চূড়ান্ত করা দরকার। চূড়ান্তকরণ নির্ধারিত হবে তবে বস্তুটি এখনও জিন 2-এ রয়েছে, সুতরাং পরবর্তী জেন 2 সংগ্রহ না হওয়া পর্যন্ত এটি পুনরায় সংগ্রহ করা হবে না। এটি প্রকৃতপক্ষে খুব দীর্ঘ সময় হতে পারে এবং প্রকৃতপক্ষে, যদি জিনিসগুলি ঠিকঠাক হয় তবে এটি দীর্ঘ সময় হতে পারে, কারণ জেন 2 সংগ্রহগুলি ব্যয়বহুল এবং সুতরাং আমরা তাদের খুব কম সময়ে ঘটতে চাই। চূড়ান্তকরণের জন্য প্রয়োজনীয় পুরানো অবজেক্টগুলিকে তাদের জায়গাটি পুনরুদ্ধার করার আগে শত শত জেন0 সংগ্রহের জন্য না পারলে কয়েক ডজন অপেক্ষা করতে হতে পারে।
দ্বিতীয়ত, চূড়ান্তকরণের প্রয়োজন এমন বস্তু সমান্তরাল ক্ষতির কারণ হয়ে থাকে। যেহেতু অভ্যন্তরীণ অবজেক্ট পয়েন্টারগুলি অবশ্যই বৈধ থাকবে, কেবলমাত্র চূড়ান্তকরণের জন্য প্রয়োজনীয় বস্তুগুলি মেমরির মধ্যেই স্থির থাকবে না তবে বস্তুটি প্রত্যক্ষ এবং অপ্রত্যক্ষভাবে নির্দেশিত সমস্ত কিছুই মেমরিতে থাকবে। যদি চূড়ান্তকরণের প্রয়োজন হয় এমন কোনও বস্তুর দ্বারা যদি বিশাল আকারের বস্তু নোঙ্গর করা থাকে, তবে আমরা কেবল আলোচনা করেছি, পুরো গাছটি দীর্ঘকাল ধরে দীর্ঘায়িত থাকবে। অতএব চূড়ান্তভাবে চূড়ান্তকরণকারী ব্যবহার করা এবং যতগুলি সম্ভব অভ্যন্তরীণ অবজেক্ট পয়েন্টার রয়েছে এমন বস্তুগুলিতে তাদের স্থাপন করা গুরুত্বপূর্ণ। আমি যে গাছের উদাহরণ দিয়েছি, তাতে আপনি চূড়ান্তকরণের প্রয়োজনীয় সংস্থানগুলি একটি পৃথক বস্তুতে স্থানান্তরিত করে এবং গাছের গোড়ায় that বস্তুর একটি রেফারেন্স রেখে সমস্যাটি সহজেই এড়াতে পারেন।
শেষ অবধি, চূড়ান্তকরণের প্রয়োজনযুক্ত বস্তুগুলি ফাইনালাইজার থ্রেডের জন্য কাজ তৈরি করে। যদি আপনার চূড়ান্তকরণ প্রক্রিয়াটি জটিল হয় তবে একমাত্র এবং চূড়ান্তকরণের থ্রেডটি এই পদক্ষেপগুলি সম্পাদন করতে প্রচুর সময় ব্যয় করবে, যা কাজের ব্যাকলগের কারণ হতে পারে এবং ফলস্বরূপ অপেক্ষা করার জন্য আরও অবজেক্টগুলিকে স্থির রাখতে পারে। সুতরাং, এটি চূড়ান্তভাবে গুরুত্বপূর্ণ যে চূড়ান্তকারীরা যতটা সম্ভব কম কাজ করে। এও মনে রাখবেন যে চূড়ান্তকরণের সময় সমস্ত অবজেক্ট পয়েন্টার বৈধ থাকে, তবে এই ক্ষেত্রে যে পয়েন্টারগুলি ইতিমধ্যে চূড়ান্ত হয়ে গেছে এবং তাই দরকারীের চেয়ে কম হতে পারে এমন বস্তুর দিকে নিয়ে যায়। পয়েন্টারগুলি বৈধ হলেও সেক্ষেত্রে চূড়ান্তকরণের কোডটিতে নিম্নলিখিত অবজেক্ট পয়েন্টারগুলি এড়ানো সাধারণত নিরাপদ। একটি নিরাপদ, সংক্ষিপ্ত চূড়ান্তকরণ কোড পাথ সেরা।
জেন 2-তে রেফারেন্সযুক্ত ডেটা টেবিলগুলির 100s এমবি দেখতে পাওয়া এমন ব্যক্তির কাছ থেকে এটি নিন: এটি অত্যন্ত গুরুত্বপূর্ণ এবং এই থ্রেডের উত্তরগুলি থেকে পুরোপুরি মিস হয়েছে।
তথ্যসূত্র:
1 -
http://msdn.microsoft.com/en-us/library/ms973837.aspx
2 - http://vineetgapt.spaces.live.com/blog/cns!8DE4BDC896BEE1AD !1104.entry
http://www.dotnetfunda.com/articles/article524-net-best-p ੈਕਟ-no- 2 - mprove -
garbage -collector ক্ষমতা সম্পন্ন-ব্যবহার-finalizedispose-pattern.aspx
3 -
http://codeidol.com/csharp/net-framework/Inside-the-CLR/ স্বয়ংক্রিয়- স্মৃতি- পরিচালন /