প্রযুক্তিগত ব্যাখ্যা
বেশিরভাগ পদ্ধতিগুলির কারণে সমস্যাগুলির কারণ উইন্ডোজ ফাইল এবং ফোল্ডারগুলি গণনা করার চেষ্টা করে। এটি কয়েক শত deep বা এমনকি কয়েক হাজার — ফাইল / ফোল্ডারগুলি কয়েক স্তরের গভীর নিয়ে খুব একটা সমস্যা নয়, তবে আপনি যখন কয়েক মিলিয়ন গভীরতায় কয়েক মিলিয়ন ফোল্ডারে ট্রিলিয়ন ফাইল রেখে চলেছেন, তখন এটি অবশ্যই সিস্টেমটিকে ডেকে আনবে og ।
আসুন আপনার "কেবল" ১০০,০০,০০০ ফাইল রয়েছে এবং উইন্ডোজ প্রতিটি ফাইলকে তার পাথের পাশাপাশি সংরক্ষণ করার জন্য এই জাতীয় কাঠামো ব্যবহার করে (এইভাবে আপনি প্রতিটি ডিরেক্টরি পৃথকভাবে সংরক্ষণ করতে পারেন, এইভাবে কিছুটা ওভারহেড সংরক্ষণ করে):
struct FILELIST { // Total size is 264 to 528 bytes:
TCHAR name[MAX_PATH]; // MAX_PATH=260; TCHAR=1 or 2 bytes
FILELIST* nextfile; // Pointers are 4 bytes for 32-bit and 8 for 64-bit
}
এটি 8-বিট অক্ষর বা ইউনিকোড অক্ষর ব্যবহার করে কিনা (এটি ইউনিকোড ব্যবহার করে) এবং আপনার সিস্টেমটি 32-বিট বা 64-বিট কিনা তা নির্ভর করে, তবে তালিকাটি সংরক্ষণের জন্য 25GB থেকে 49GB মেমরির প্রয়োজন হবে (এবং এটি খুব সম্ভবত সরলীকৃত কাঠামো)।
কারণ কেন উইন্ডোজ তাদের মোছার আগে ফাইল এবং ফোল্ডার গনা করার চেষ্টা করে পদ্ধতি আপনি তাদের মুছে দিতে ব্যবহার করা হয় উপর নির্ভর করে, তবে দুটো একসাথে এক্সপ্লোরার এবং কম্যান্ড-ব্যাখ্যাকারী এটা করতে (আপনি একটি বিলম্ব দেখতে পারেন যখন আপনি কমান্ড সূচনা)। ড্রাইভ থেকে ডিরেক্টরি ট্রি পড়ার সাথে সাথে আপনি ডিস্ক ক্রিয়াকলাপ (এইচডিডি এলইডি) ফ্ল্যাশও দেখতে পাবেন।
সমাধান
এই ধরণের পরিস্থিতি মোকাবেলার জন্য আপনার সেরা বাজি হ'ল একটি মুছার সরঞ্জামটি যা ফাইল এবং ফোল্ডারগুলিকে পৃথকভাবে মুছে ফেলা হয়, তা একবারে। এটি করার কোনও প্রস্তুত সরঞ্জাম আছে কিনা তা আমি জানি না, তবে এটি একটি সাধারণ ব্যাচ-ফাইল দিয়ে সম্পন্ন করা উচিত ।
@echo off
if not [%1]==[] cd /d %1
del /q *
for /d %%i in (*) do call %0 "%%i"
এটি যা করে তা হল কোনও যুক্তি পাস হয়েছে কিনা তা পরীক্ষা করা check যদি তা হয়, তবে এটি নির্দিষ্ট করা ডিরেক্টরিতে পরিবর্তিত হয় (আপনি বর্তমান ডিরেক্টরিটি শুরু করার জন্য একটি যুক্তি ছাড়াই এটি চালাতে পারেন বা ডিরেক্টরিটি নির্দিষ্ট করতে পারেন — এমনকি এটির শুরু করার জন্য আলাদা ড্রাইভেও)।
এর পরে, এটি বর্তমান ডিরেক্টরিতে সমস্ত ফাইল মুছে দেয়। এই মোডে, এটি কোনও কিছু গণনা করা উচিত নয় এবং মেমরির খুব বেশি চুষে না ফেলে কেবল ফাইলগুলি মুছে ফেলা উচিত।
তারপরে এটি বর্তমান ডিরেক্টরিতে ফোল্ডারগুলি গণনা করে এবং নিজেই কল করে প্রতিটি ফোল্ডারটিকে নীচে দিকে পুনরাবৃত্তি করতে তার (স্ব) এ দিয়ে যায়।
বিশ্লেষণ
কারণ এই উচিত , কারণ এটি প্রতি একক ফাইল এবং ফোল্ডার গনা না কাজ করে সমগ্র গাছ । এটা সব সময়ে কোন ফাইল গনা না, এবং শুধুমাত্র বর্তমান ডিরেক্টরির মধ্যে ফোল্ডার (প্লাস উল্লেখ অবশিষ্ট পিতা বা মাতা ডিরেক্টরিগুলি থেকে বেশী)। ধরে নিলাম যে কোনও প্রদত্ত ফোল্ডারে কেবল কয়েক শতাধিক সাব-ডিরেক্টরি রয়েছে, তবে এটি খুব খারাপ হওয়া উচিত নয় এবং অবশ্যই অবশ্যই অন্যান্য গাছের তুলনায় পুরো গাছকে গণনার তুলনায় অনেক কম স্মৃতি দরকার।
আপনি /r
(ম্যানুয়াল) পুনরাবৃত্তি ব্যবহার না করে স্যুইচটি ব্যবহার করার বিষয়ে অবাক হতে পারেন। এটি কাজ করবে না কারণ /r
স্যুইচটি পুনরাবৃত্তি করার সময় এটি সম্পূর্ণ ডিরেক্টরি গাছটিকে প্রাক-গণনা করে যা আমরা এড়াতে চাই ঠিক তাই; ট্র্যাক না রেখে আমরা মুছে ফেলতে চাই।
তুলনা
এই পদ্ধতিটিকে পূর্ণ-গণিতের পদ্ধতির সাথে তুলনা করতে দিন।
আপনি বলেছিলেন যে আপনার "লক্ষ লক্ষ ডিরেক্টরি" রয়েছে; 100 মিলিয়ন বলুন। যদি গাছটি প্রায় ভারসাম্যপূর্ণ হয় এবং প্রতিটি ফোল্ডারে গড়ে প্রায় 100 টি উপ-ডিরেক্টরি অনুমান করে, তবে গভীরতম নেস্টেড ডিরেক্টরিটি প্রায় চারটি স্তর থেকে নীচে নেমে আসবে — বাস্তবে পুরো গাছটিতে 101,010,100 উপ-ফোল্ডার থাকবে। (কীভাবে 100 এম ভেঙে কেবল 100 এবং 4 এ নেমে আসতে পারে তা মজাদার)
যেহেতু আমরা ফাইলগুলি গণনা করছি না, তাই আমাদের কোনও স্তরের সর্বাধিক 4 × 100 = 400
ডিরেক্টরিগুলির জন্য কেবলমাত্র প্রতিটি স্তরের সর্বাধিক 100 টি নামের নামের সন্ধান করা দরকার ।
সুতরাং মেমরির প্রয়োজনীয়তা কোনও আধুনিক (বা অন্যথায়) সিস্টেমের সীমার মধ্যে অবশ্যই 206.25KB হওয়া উচিত।
পরীক্ষা
দুর্ভাগ্যক্রমে (?) আমার কয়েক মিলিয়ন ফোল্ডারে ট্রিলিয়ন ফাইল যুক্ত সিস্টেম নেই, তাই আমি এটি পরীক্ষা করতে সক্ষম হচ্ছি না (আমি শেষ গণনায় বিশ্বাস করি, আমার প্রায় 800 ডলার ফাইল ছিল), সুতরাং অন্য কাউকে চেষ্টা করতে হবে এটা।
বিচারকার্য স্থগিত রাখার আদেশ
অবশ্যই মেমরি একমাত্র সীমাবদ্ধতা নয়। ড্রাইভটি খুব বড় প্রতিবন্ধক হবে কারণ আপনার মুছে ফেলা প্রতিটি ফাইল এবং ফোল্ডারের জন্য সিস্টেমটিকে এটি বিনামূল্যে হিসাবে চিহ্নিত করতে হবে। ধন্যবাদ, এই ডিস্ক অপারেশনগুলির অনেকগুলি একত্রে একত্রিত করা হবে (ক্যাশেড) এবং পৃথক পৃথক পরিবর্তে (কমপক্ষে হার্ড-ড্রাইভের জন্য, অপসারণযোগ্য মিডিয়ায় নয়) লিখিত হবে, তবে সিস্টেমটি পড়ার পরে এটি বেশ কিছুটা ছিটকে পড়েছে cause এবং তথ্য লেখেন।