ইসিএস? আমি প্রকৃতপক্ষে পরামর্শ দিচ্ছি যে এটি অকাল হতে পারে না যদি তাই নকশা এবং বেনমার্কের বিভিন্ন রেপগুলির ডেটা-ভিত্তিক দিকে অনেক চিন্তাভাবনা করা হয় কারণ এটি আপনার ইন্টারফেস ডিজাইনের উপর প্রভাব ফেলতে পারে , এবং আধুনিকীকরণটি দেরিতে পরিবর্তন হওয়া খুব ব্যয়বহুল is খেলাাটি. এছাড়াও ইসিএস কেবলমাত্র অনেক কাজ এবং সামনের দিকে চিন্তা করে এবং আমি মনে করি যে এটি আপনার সময়কালে ডিজাইন-স্তরের পারফরম্যান্সের দুঃখকে আরও দিচ্ছে না যে এটি আপনার হৃদয়ে কীভাবে চলেছে তা নিশ্চিত করার জন্য এটি সময়ের কিছুটা কাজে লাগানো উপযুক্ত worth পুরো freaking ইঞ্জিন। এই অংশটি আমার দিকে তাকিয়ে আছে:
unordered_map<string,[yada]>
এমনকি ছোট স্ট্রিং অপটিমাইজেশন সহ, আপনার অন্য পরিবর্তনশীল-আকারের ধারক (আনর্ডারড_ম্যাপস) এর ভিতরে একটি পরিবর্তনশীল-আকারের ধারক (স্ট্রিং) রয়েছে। আসলে, ছোট স্ট্রিং অপ্টিমাইজেশন আসলে এই ক্ষেত্রে সহায়ক হিসেবে ক্ষতিকর যেন আপনার টেবিল খুব বিক্ষিপ্ত হয়, হতে পারে যেহেতু ছোট স্ট্রিং অপ্টিমাইজেশান সূচিত করা হবে যে হ্যাশ টেবিল প্রতিটি অব্যবহৃত সূচক এখনও এস এস অপ্টিমাইজেশান জন্য আরো মেমরি ব্যবহার করা হবে ( sizeof(string)
হবে অনেক বড় হয়ে উঠুন) আপনার হ্যাশ টেবিলের মোট স্মৃতি ওভারহেডের মধ্যে আপনি যা সঞ্চয় করছেন তার চেয়ে বেশি দাম পড়তে পারে, বিশেষত যদি এটি কোনও পজিশনের উপাদানগুলির মতো একটি সাধারণ উপাদান রয়েছে, তবে আরও বিশাল পরিমাণে ক্যাশে মিস করা ছাড়াও হ্যাশ টেবিলের এক প্রবেশ থেকে পরের দিকে যেতে।
আমি ধরে নিচ্ছি যে স্ট্রিংটি কোনও ধরণের কী, যেমন একটি উপাদান আইডি। যদি তা হয় তবে এটি ইতিমধ্যে জিনিসগুলিকে নাটকীয়ভাবে সস্তা করে তুলেছে:
unordered_map<int,[yada]>
... আপনি যদি স্ক্রিপ্টর ব্যবহার করতে পারেন এমন ব্যবহারকারী-বান্ধব নাম রাখতে সক্ষম হওয়ার সুবিধাগুলি চান, উদাহরণস্বরূপ, তবে ইন্টার্নযুক্ত স্ট্রিংগুলি আপনাকে এখানে উভয় বিশ্বের সেরা দিতে পারে।
এটি বলেছে, আপনি যদি ঘন-ব্যবহৃত সূচকগুলির যথাযথভাবে কম পরিসরে স্ট্রিংটি মানচিত্র করতে পারেন, তবে আপনি কেবল এটি করতে সক্ষম হতে পারেন:
vector<[yada]> // the index and key become one and the same
আমি এই অকাল বিবেচনা না করার কারণ হ'ল, আবার এটি আপনার ইন্টারফেস ডিজাইনে প্রভাব ফেলতে পারে। ডিওডি-র বিষয়টি হ'ল এক সময় আইএমওতে কল্পনাযোগ্য সবচেয়ে দক্ষ ডেটা উপস্থাপনার সাথে সামনে আসার চেষ্টা করা উচিত নয় (যা সাধারণত প্রয়োজন হিসাবে পুনরাবৃত্তভাবে অর্জন করা উচিত), তবে তাদের সাথে কাজ করার জন্য শীর্ষে ইন্টারফেসগুলি ডিজাইন করার জন্য তাদের যথেষ্ট চিন্তা করা উচিত ডেটা যা আপনাকে যথেষ্ট পরিমাণে শ্বাস-প্রশ্বাসের ঘর ছেড়ে দেয় এবং ক্যাসকেডিং ডিজাইন পরিবর্তন ছাড়াই অনুকূলিত করে।
একটি নিষ্পাপ উদাহরণ হিসাবে, একটি ভিডিও প্রসেসিং সফ্টওয়্যার যা এর বিরুদ্ধে সমস্ত কোড সংযুক্ত করে:
// Abstract pixel that could be concretely represented by
// RGB, BGR, RGBA, BGRA, 1-bit channels, 8-bit channels,
// 16-bit channels, 32-bit channels, grayscale, monochrome,
// etc. pixels.
class IPixel
{
public:
virtual ~IPixel() {}
...
};
কোনও সম্ভাব্য মহাকাব্য পুনর্লিখন ছাড়া খুব বেশি দূরে যাবে না, যেহেতু একক পিক্সেল স্তরে বিমূর্ত করার ধারণা ইতিমধ্যে অত্যন্ত অদক্ষ ( চিত্রটি স্তরের vptr
বিমূর্তকরণের তুলনায় নিজেই পুরো পিক্সেলের চেয়ে অনেক বেশি মেমরির জন্য ব্যয় করতে পারে) প্রায়শই মিলিয়ন পিক্সেল উপস্থাপন করে)। সুতরাং আপনার ডেটা উপস্থাপনাগুলিতে আগে থেকেই পর্যাপ্ত চিন্তাভাবনা রাখুন যাতে আপনাকে এইরকম দুঃস্বপ্নের দৃশ্যের মুখোমুখি না হতে হয় এবং আদর্শভাবে আর কোনও হয় না, তবে এখানে আমি মনে করি যে আপনি এটি তৈরি করতে চান না বলেই এই স্টাফগুলি সম্পর্কে চিন্তা করা উপযুক্ত do আপনার ইসিএসের চারপাশে জটিল ইঞ্জিন এবং আবিষ্কার করুন যে ইসিএস নিজেই এমনভাবে বাধা হয়ে দাঁড়িয়েছে যেগুলি আপনাকে ডিজাইনের পর্যায়ে জিনিসগুলি পরিবর্তন করতে হবে require
ইসিএস ক্যাশে যেমন মিস হয় তবে আমার মতে বিকাশকারীরা তাদের ইসিএস ক্যাশে-বান্ধব করে তুলতে প্রায়শই চেষ্টা করেন try আপনার সমস্ত উপাদানকে নিখুঁতভাবে সামঞ্জস্যপূর্ণ ফ্যাশনে অ্যাক্সেস করার চেষ্টা করার জন্য এটিকে খুব সামান্য ঠাঁই পাওয়া শুরু হয় এবং প্রায়শই পুরো জায়গা জুড়ে ডেটা অনুলিপি করা এবং বদলানো বোঝায়। এটি কেবলমাত্র বলার অপেক্ষা রাখে না যে কেবলমাত্র উপাদানগুলির সূচকগুলি অ্যাক্সেস করার পূর্বে কেবল সেগুলি সাজান যাতে আপনি সেগুলিতে এমনভাবে প্রবেশ করতে পারেন যেখানে আপনি কমপক্ষে কোনও মেমরি অঞ্চলকে ক্যাশে লাইনে লোড করছেন না, কেবল এটি সরিয়ে দেওয়ার জন্য, এবং তারপরে লোড করুন এটি আবার একই লুপে আবার একই ক্যাশে লাইনের একটি আলাদা অংশ অ্যাক্সেস করতে। এবং কোনও ইসিএসকে পুরো বোর্ড জুড়ে আশ্চর্য দক্ষতা সরবরাহ করতে হবে না। এটি কোনও পদার্থবিজ্ঞান বা রেন্ডারিং সিস্টেমের মতো কোনও ইনপুট সিস্টেমের উপকারের মতো নয়, তাই আমি "ভাল" লক্ষ্য করার পরামর্শ দিই বোর্ড জুড়ে দক্ষতা এবং কেবলমাত্র যেখানে আপনার সত্যিই এটি প্রয়োজন সেখানে "দুর্দান্ত"। যে বলেন, ব্যবহারunordered_map
এবং string
এড়াতে এখানে যথেষ্ট সহজ।