সি # তে হ্যাশটেবল এবং অভিধানের ব্যবহারিক আকারের সীমা


12

সি # 4 অভিধান বা হ্যাশটেবলে থাকতে পারে এমন আইটেমের সংখ্যার জন্য ব্যবহারিক সীমাবদ্ধতাগুলি কী এবং এই কাঠামোগুলিতে যুক্তিসঙ্গত থাকতে পারে এমন মোট বাইটের সংখ্যা। আমি প্রচুর পরিমাণে অবজেক্টের সাথে কাজ করব এবং জানতে চাইছি কখন এই কাঠামোগুলি সমস্যার মুখোমুখি হতে শুরু করে।

প্রসঙ্গে, আমি টন মেমরির সাথে একটি 64 বিট সিস্টেম ব্যবহার করব। এছাড়াও, আমাকে কিছু ফর্ম বা 'কী' ব্যবহার করে অবজেক্টগুলি সন্ধান করতে হবে। কর্মক্ষমতা চাহিদা হিসাবে দেওয়া, এই বিষয়বস্তু স্মৃতিতে থাকা প্রয়োজন, এবং অনেক দীর্ঘায়ু হবে।

অন্যান্য পদ্ধতির / নিদর্শনগুলি নির্দ্বিধায় নির্দ্বিধায় মনে করুন, যদিও আমার তৃতীয় পক্ষ বা ওপেন-সোর্স লাইব্রেরি ব্যবহার করা উচিত। নির্দিষ্টকরণের কারণে, আমার নেটিভ সি # ( বা সি ++ \ সিএলআই ) ব্যবহার করে এটি তৈরি করতে সক্ষম হওয়া দরকার ।


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

উত্তর:


8

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

আমি স্মরণে একটি অভিধানে কয়েক হাজার আইটেম একসাথে সংগ্রহ করেছি এবং ইস্যুটি অভিধানের আকার নয় বরং স্মৃতিতে থাকা বস্তুর আকার the এই ক্ষেত্রে অভিধান নিজেই জড়িত মেমরির একটি ক্ষুদ্র অংশ ছিল।

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

এটি অবজেক্ট এবং মেমরির আকার সম্পর্কে স্ট্যাক ওভারফ্লো প্রশ্ন


2

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


0

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


-1

আমি সম্প্রতি গিথুব প্রকল্পটি হ্যাশ-টেবিল-শ্যুটআউট আপডেট করেছি (এখানে: https://github.com/jimbelton/hash-table-shoutout )। 40 এম অবজেক্টগুলি সঞ্চয় করার জন্য স্ট্যান্ডার্ড জিসিসি আনর্ডার্ড মানচিত্রে প্রায় 1.8 গিগাবাইট ওভারহেড রয়েছে। এটি আমার কাছে বেশ নৃশংস বলে মনে হচ্ছে, তবে সর্বোত্তম পারফর্মার মেমরি অনুসারে গুগল স্পারস_হ্যাশ_ম্যাপটি 600 এমবিটস লাগে এবং এটি ব্যবহারের জন্য আপনি একটি পারফরম্যান্স জরিমানা প্রদান করেন। যদি আপনি অন্তর্ভুক্ত অ্যালগরিদমের গতি চান তবে গ্লিব জিহ্যাশ টেবিলটি সবচেয়ে দ্রুত এবং মেমরির ভাল পারফরম্যান্স রয়েছে (প্রায় 1.3 গিগাইটস ওভারহেড)। মানদণ্ডের ফলাফলগুলি এখানে পোস্ট করা হয়েছে: https://jimbelton.wordpress.com/2015/07/01/hash-table-shootout-on-github/

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