এই দ্রুত পরামর্শটি দীর্ঘ উত্তর হয়ে উঠেছে। দুঃখিত।
টাইলার যেমন তার উত্তরের উত্তরে উল্লেখ করেছেন, কল Dispose()করা একটি দুর্দান্ত প্রোগ্রামিং অনুশীলন। কারণ এই পদ্ধতিটি সমস্ত সংস্থান-মুক্ত করার প্রয়োজনে "একসাথে সমাবেশ" করার কথা ছিল যাতে কোনও অনিবন্ধিত মুক্ত সংস্থান নেই। উদাহরণস্বরূপ, আপনি যদি কোনও ফাইলে কিছু পাঠ্য লিখে থাকেন এবং ফাইলটি বন্ধ করতে ব্যর্থ হন (সংস্থানটি মুক্ত করুন), এটি উন্মুক্ত থাকবে এবং জিসি কাছাকাছি না আসা পর্যন্ত আপনার লেখাটি অন্য কেউ করতে সক্ষম হবে না সম্পন্ন.
এখন, কিছু ক্ষেত্রে আপনি যে শ্রেণীর সাথে কাজ করছেন তার মতো আরও নির্দিষ্ট করে "চূড়ান্তকরণ" পদ্ধতি থাকবে যা কোনভাবে StreamWriter.Close()ওভাররাইড করে TextWriter.Close()। প্রকৃতপক্ষে তারা পরিস্থিতিটির জন্য সাধারণত আরও উপযুক্ত! Close()উদাহরণস্বরূপ, একটি স্ট্রিমরাইটার বস্তুর আইংয়ের আগে স্ট্রিম এবং অন্তর্নিহিত এনকোডারকে ফ্লাশ করে Dispose()! শান্ত!
তবে, এমএসডিএন ব্রাউজ করার মাধ্যমে আপনি দেখতে পাবেন যে এমনকি মাইক্রোসফ্ট কখনও কখনও ক্লোজার এবং ডিসপোজারদের ভিড় দ্বারা বিভ্রান্ত হয়। এই ওয়েবপৃষ্ঠায় , উদাহরণস্বরূপ, কিছু উদাহরণগুলিকে Close()অন্তর্নিহিত হওয়ার আগে ডাকা হয়েছিল Dispose()( এটি বিবৃত কেন তা বুঝতে না পারলে বিবৃতি ব্যবহার করে দেখুন ) এবং বিশেষত একটিতে তারা এটিকে বিরক্ত করে না। কেন হবে? আমিও হতবাক হয়ে গেলাম।
আমি যে কারণটি অনুভব করেছি (এবং, আমি চাপ দিয়েছি, এটি মূল গবেষণা এবং আমি ভুল হলে অবশ্যই অবশ্যই খ্যাতি হারাতে পারি) এটি Close()ব্যর্থ হতে পারে, সম্পদ খোলা রেখে ব্যতিক্রমী ফলস্বরূপ, Dispose()অবশ্যই এগুলি মুক্ত করে দেবে । যে কারণে একটি Dispose()সর্বদা একটি Close()কলকে রক্ষা করা উচিত (শ্লেষের জন্য দুঃখিত)।
MyResource r = new MyResource();
try {
r.Write(new Whatever());
r.Close()
finally {
r.Dispose();
}
এবং হ্যাঁ, আমি অনুমান করি যে মাইক্রোসফ্ট একটি উদাহরণে পিছলে গেছে। সম্ভবত সেই টাইমস্ট্যাম্পটি কখনও ফাইলটিতে ফ্লাশ হবে না।
আমি আগামীকাল আমার পুরানো কোড ঠিক করছি।
সম্পাদনা: দুঃখিত ব্রানন, আমি আপনার উত্তর সম্পর্কে মন্তব্য করতে পারি না, তবে আপনি কি নিশ্চিত যে Close()কোনও finallyব্লকে ফোন করা ভাল ধারণা ? আমার ধারণা এটি থেকে একটি ব্যতিক্রম সম্ভবত ব্লকের বাকী অংশগুলি নষ্ট করে দিতে পারে যার মধ্যে সম্ভবত গুরুত্বপূর্ণ ক্লিনআপ কোড থাকবে।
ব্র্যাননের জবাব দিন: দুর্দান্ত, Close()যখন এটি সত্যই প্রয়োজন তখন কল করতে ভুলবেন না (যেমন স্ট্রিমগুলির সাথে ডিল করার সময় - .NET এ এসকিউএল সংযোগগুলি সম্পর্কে খুব বেশি কিছু জানেন না)।