মেমরি পরিচালনা সম্পর্কিত এন্ট্রি লেভেল ইঞ্জিনিয়ার প্রশ্ন


9

আমি এন্ট্রি স্তরের সফটওয়্যার বিকাশকারী হিসাবে আমার অবস্থান শুরু করার কয়েক মাস হয়ে গেছে। এখন যেহেতু আমি কিছু শেখার কার্ভগুলি (যেমন ভাষা, জারগন, ভিবি এবং সি # এর সিনট্যাক্স) পেরিয়ে গিয়েছি আরও ভাল সফ্টওয়্যার লেখার জন্য আমি আরও গুপ্ত বিষয়গুলিতে মনোনিবেশ করতে শুরু করছি।

একটি সহকর্মী সহকর্মীর কাছে আমি উপস্থাপিত একটি সাধারণ প্রশ্নটির সাথে "আমি ভুল বিষয়গুলিতে ফোকাস করছি" এর প্রতিক্রিয়া জানানো হয়েছিল। আমি এই সহকর্মীকে শ্রদ্ধা করার সময় আমি একমত নই যে এটি ফোকাস করার জন্য এটি একটি "ভুল জিনিস"।

এখানে কোডটি ছিল (ভিবিতে) এবং পরে প্রশ্নটি এসেছে।

দ্রষ্টব্য: ফাংশন জেনারেট অ্যালার্ট () একটি পূর্ণসংখ্যা দেয়।

Dim alertID as Integer = GenerateAlert()
_errorDictionary.Add(argErrorID, NewErrorInfo(Now(), alertID))    

বনাম ...

 _errorDictionary.Add(argErrorID, New ErrorInfo(Now(), GenerateAlert()))

আমি প্রথমে উত্তরটি লিখেছিলাম এবং এটি "ডিমে অ্যালার্টআইডি" দিয়ে আবার লিখেছিলাম যাতে অন্য কারও পক্ষে পড়া সহজ হয় find তবে এখানে আমার উদ্বেগ এবং প্রশ্ন ছিল:

যদি কেউ এটিকে Dim AlertID দিয়ে লেখেন তবে বাস্তবে এটি আরও স্মৃতি গ্রহণ করবে; সীমাবদ্ধ কিন্তু আরও বেশি, এবং এই পদ্ধতিটি বহুবার বলা উচিত এটি কোনও সমস্যার কারণ হতে পারে? কীভাবে। নেট এই বিষয়বস্তুটি সতর্কতা অবলম্বন করবে। .NET এর বাহিরে ব্যবহারের পরে কোনওটিকে ম্যানুয়ালি নিষ্পত্তি করা উচিত (সাবটির শেষের দিকে)।

আমি নিশ্চিত করতে চাই যে আমি একজন জ্ঞানী প্রোগ্রামার হয়ে উঠি যা কেবল আবর্জনা সংগ্রহের উপর নির্ভর করে না। আমি কি এই চিন্তাভাবনা শেষ করছি? আমি কি ভুল জিনিসগুলিতে ফোকাস দিচ্ছি?


1
প্রথম সংস্করণটি বেশি পঠনযোগ্য বলে আমি সহজেই কেসটি তৈরি করতে পারি যে তিনি 100%। আমি বাজিয়ে দিতাম কম্পাইলার এমনকি আপনার সাথে সম্পর্কিত যা যত্ন নিতে পারে। তা না হলেও আপনি অকালে অপ্টিমাইজ করছেন।
রিগ

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

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

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

আপনার সহকর্মী সঠিক ছিল: আপনার প্রশ্ন উত্থাপিত সমস্যাটি অপ্টিমাইজেশন সম্পর্কে হওয়া উচিত ছিল না, তবে পাঠযোগ্যতার বিষয়ে
হাইলেম

উত্তর:


25

"অকালীন অপটিমাইজেশন হ'ল প্রোগ্রামিংয়ে সমস্ত মন্দ (বা এর বেশিরভাগ অংশে) এর মূলে" " - ডোনাল্ড নুথ

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

কর্মক্ষমতা এবং অপ্টিমাইজেশনের এই বিষয়গুলি খনন করা কি উপযুক্ত? অবশ্যই, তবে আপনার কোম্পানির ডলারে এটি অপ্রয়োজনীয় না হলে নয়।


1
আর কার ডলার হওয়া উচিত? আপনার নিয়োগকর্তা আপনার দক্ষতার চেয়ে আপনার দক্ষতা বৃদ্ধি থেকে উপকৃত হন।
মার্সিন

বিষয়গুলি যা আপনার বর্তমান কার্যক্রমে সরাসরি অবদান রাখে না? আপনার নিজের সময়ে এই জিনিসগুলি অনুসরণ করা উচিত। আমি যদি বসে বসে সমস্ত কমপিএসসি আইটেম নিয়ে গবেষণা করে থাকি যা দিনের পরিক্রমায় আমার কৌতূহলকে আরও বাড়িয়ে তোলে তবে আমি কিছুই করতে পারিনি। আমার সন্ধ্যার জন্য এটিই।
ক্রিস্টোফার বারম্যান 19

2
রহস্যময়। আমাদের মধ্যে কারও কারও ব্যক্তিগত জীবন রয়েছে এবং আমি যেমন বলি, নিয়োগকর্তা মূলত গবেষণা থেকে উপকৃত হন। মূল বিষয়টি হ'ল এটিতে সমস্ত দিন ব্যয় করা উচিত নয়।
মার্সিন

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

2
আমি উপরের মন্তব্যে উল্লিখিত মতামতগুলি বুঝতে পারি; আমি নোট চাই যে আমি আমার মধ্যাহ্নভোজন বিরতি সময় জিজ্ঞাসা। :)। আবার, স্ট্যাক এক্সচেঞ্জ সাইট জুড়ে আপনার ইনপুটটির জন্য আপনাকে সকলকে ধন্যবাদ; এটা অমূল্য!
শন হবস

5

আপনার গড় .NET প্রোগ্রামের জন্য, হ্যাঁ, এটি অতিরিক্ত বিবেচনা করছে। এমন অনেক সময় থাকতে পারে যেখানে আপনি .NET এর ভিতরে যা চলছে তার বাদাম এবং বোল্টে নামতে চাইবেন তবে এটি তুলনামূলকভাবে বিরল।

90 এর দশকে ক্লাসিক ভিবিতে প্রোগ্রামিংয়ে সি এবং এমএএসএম ব্যবহার করা থেকে বদলে যাওয়া আমার মধ্যে একটি কঠিন ট্রানজিশন ছিল। আমি আকার এবং গতির জন্য সবকিছুকে অনুকূলকরণ করতে অভ্যস্ত ছিলাম। আমাকে বেশিরভাগ ক্ষেত্রে এই চিন্তাভাবনা ছেড়ে দিতে হয়েছিল এবং কার্যকর হওয়ার জন্য ভিবিকে এটি করা উচিত।


5

আমার সহকর্মী হিসাবে সর্বদা বলতেন:

  1. এটি কাজ করা
  2. সমস্ত ত্রুটিগুলি এটি নির্বিঘ্নে কাজ করতে ঠিক করুন
  3. এটিকে সলিড করুন
  4. যদি এটি ধীর গতিতে কাজ করে তবে অপ্টিমাইজেশন প্রয়োগ করুন

অন্য কথায়, সর্বদা KISS মনে রাখবেন (এটিকে সহজ বোকা রাখুন)। কারণ ওভার ইঞ্জিনিয়ারিং, অতিরিক্ত কোডিং কিছু কোড লজিক পরের বার লজিক পরিবর্তন করার সমস্যা হতে পারে। যাইহোক, কোড পরিষ্কার এবং সরল রাখা সর্বদা ভাল অনুশীলন

যাইহোক, সময় এবং অভিজ্ঞতার দ্বারা আপনি আরও ভাল করে জানতে পারবেন কোন কোডটি গন্ধ পাচ্ছে এবং খুব শীঘ্রই অপ্টিমাইজেশানের প্রয়োজন হবে।


3

কেউ যদি এটিকে Dim AlertID দিয়ে লেখেন

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

এটি আসলে আরও স্মৃতি গ্রহণ করবে;

আমার সন্দেহ হয় এটা হয় না। এটি সংকলকটি তৈরির জন্য তুলনামূলকভাবে সোজা-ফরওয়ার্ড অপটিমাইজেশন।

এই পদ্ধতিটি কি অনেক বার বলা উচিত এটি কোনও সমস্যার কারণ হতে পারে?

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

কীভাবে। নেট এই বিষয়বস্তুটি সতর্কতা অবলম্বন করবে।

সতর্কতা কোনও বস্তু নয়। জেনারেট অ্যালার্ট () এর ফলাফলটি হ'ল অবজেক্ট। সতর্কতা হ'ল ভেরিয়েবল, যা এটি যদি স্থানীয় ভেরিয়েবল হয় তবে জিনিসগুলির উপর নজর রাখার জন্য পদ্ধতির সাথে যুক্ত স্থানটি কেবল।

.NET এর বাইরে ব্যবহারের পরে কোনও একটিকে ম্যানুয়ালি নিষ্পত্তি করা উচিত

এটি একটি বিশুদ্ধ প্রশ্ন যা জেনারেট অ্যালার্ট () সরবরাহ করেছেন সেই সংস্থার প্রসঙ্গ এবং মালিকানা শব্দার্থবিজ্ঞানের উপর নির্ভর করে। সাধারণভাবে, যা কিছু ঘটেছে তা এটিকে মুছে ফেলা উচিত। আপনার প্রোগ্রামটি সম্ভবত ম্যানুয়াল মেমরির ম্যানেজমেন্টটি বিবেচনা করে ডিজাইন করা থাকলে তা উল্লেখযোগ্যভাবে আলাদা হবে।

আমি নিশ্চিত করতে চাই যে আমি একজন জ্ঞানী প্রোগ্রামার হয়ে উঠি যা কেবল আবর্জনা সংগ্রহের উপর নির্ভর করে না। আমি কি এই চিন্তাভাবনা শেষ করছি? আমি কি ভুল জিনিসগুলিতে ফোকাস দিচ্ছি?

একজন ভাল প্রোগ্রামার আবর্জনা সংগ্রহকারী সহ তাদের কাছে উপলব্ধ সরঞ্জামগুলি ব্যবহার করে। বিস্মৃত হওয়ার চেয়ে জিনিসকে উচ্ছেদ করা ভাল। আপনি হয়ত ভুল জিনিসগুলিতে মনোযোগ দিচ্ছেন, তবে যেহেতু আমরা এখানে আছি, আপনি সম্ভবত এটি সম্পর্কেও শিখতে পারেন।


2

এটিকে কাজ করুন, এটিকে পরিষ্কার করুন, এটিকে নিবিড় করুন, তারপরে এটি যত দ্রুত কাজ করা দরকার তত দ্রুত কাজ করুন

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

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

.NET- এ মাইক্রো-অপ্টিমাইজেশন প্রায়শই এটির জন্য মূল্যহীন নয় (আমি 99.99% কেস সম্পর্কে বলছি)। সি / সি ++ এ, আপনি যদি জানেন যে আপনি কী করছেন। .NET পরিবেশে কাজ করার সময়, আপনি ইতিমধ্যে হার্ডওয়ারের ধাতু থেকে অনেক দূরে রয়েছেন যে কোড প্রয়োগে উল্লেখযোগ্য ওভারহেড রয়েছে। সুতরাং, আপনি ইতিমধ্যে এমন একটি পরিবেশে রয়েছেন যা ইঙ্গিত দেয় যে আপনি ঝাপটানো গতি ছেড়ে দিয়েছেন এবং পরিবর্তে "সঠিক" কোডটি লিখতে চেয়েছেন, যদি কোনও নেট নেট পরিবেশে কিছুটা সত্যই যথেষ্ট দ্রুত কাজ করে না, হয় হয় তার জটিলতা খুব বেশি, বা আপনার এটিকে সমান্তরাল করার বিষয়ে বিবেচনা করা উচিত। অপ্টিমাইজেশান অনুসরণ করার জন্য এখানে কয়েকটি বেসিক পয়েন্টার রয়েছে; আমি আপনাকে অপ্টিমাইজেশনে আপনার উত্পাদনশীলতার গ্যারান্টি দিচ্ছি (সময় ব্যয় করার জন্য গতি অর্জন করবে) আকাশচুম্বী হবে:

  • ক্রিয়াকলাপের আকার পরিবর্তন করা সহগের পরিবর্তনের চেয়েও গুরুত্বপূর্ণ - ডাব্লুআরটি বিগ-ওহ জটিলতা, আপনি কোনও এন 2 অ্যালগরিদমকে অর্ধেক দ্বারা নির্বাহ করতে হবে এমন পদক্ষেপের সংখ্যা কমিয়ে আনতে পারেন, এবং এরপরে এটি কার্যকর হলেও সেক্ষেত্রে আপনার একটি চতুর্ভুজ-জটিলতা অ্যালগরিদম রয়েছে অর্ধেক সময় এটি ব্যবহার করতে হবে। যদি এই ধরণের সমস্যার জটিলতার নীচু সীমানা হয়, তবে তা হ'ল, তবে যদি একই সমস্যার কোনও এনলগএন, লিনিয়ার বা লোগারিথমিক সমাধান থাকে তবে আপনার যে সমস্যাটি রয়েছে তার চেয়ে অনুকূলতার চেয়ে জটিলতা হ্রাস করতে আপনি অ্যালগরিদমগুলি স্যুইচ করে আরও বেশি অর্জন করতে পারবেন।
  • কেবল জটিলতাটি আপনি দেখতে পাচ্ছেন না তার অর্থ এটি আপনার ব্যয়বহুল নয় - শব্দের মধ্যে অনেক মার্জিত ওয়ান-লাইনার ভয়ঙ্করভাবে সঞ্চালন করে (উদাহরণস্বরূপ, রেজেক্স প্রাইম চেকার একটি ক্ষতিকারক-জটিলতার ফাংশন, দক্ষ যখন বর্গমূলের চেয়ে কম সংখ্যক মৌলিক সংখ্যা দ্বারা সংখ্যা বিভক্ত করার সাথে সম্পর্কিত মূল্যায়ন (এনলগ (স্ক্র্যাট (এন)) এর আদেশ অনুসারে হয়। লিনক একটি দুর্দান্ত গ্রন্থাগার কারণ এটি কোডকে সহজতর করে তবে এসকিউএল ইঞ্জিনের বিপরীতে, নেট। সংকলক আপনার ক্যোয়ারি কার্যকর করার সবচেয়ে কার্যকর উপায় আবিষ্কার করার চেষ্টা করবে না a আপনি যখন কোনও পদ্ধতি ব্যবহার করবেন তখন কী ঘটবে তা আপনাকে জানতে হবে এবং সুতরাং কেন উত্পাদনের সময় কোনও পদ্ধতি আগে (বা পরে) শৃঙ্খলে রাখলে দ্রুততর হতে পারে কেন? একই ফলাফল।
  • OTOH, উত্স জটিলতা এবং রানটাইম জটিলতার মধ্যে প্রায় সবসময়ই একটি বাণিজ্য থাকে - সিলেকশনসোর্ট কার্যকর করা খুব সহজ; আপনি সম্ভবত এটি 10 ​​দফায় বা তার চেয়ে কম ক্ষেত্রে করতে পারেন। MergeSort কিছুটা জটিল, আরও Quixort, এবং RadixSort আরও বেশি। তবে, কোডিং জটিলতায় অ্যালগরিদমগুলি বাড়ার সাথে (এবং এইভাবে "আপ-ফ্রন্ট" বিকাশের সময়), এগুলি রানটাইম জটিলতায় হ্রাস পায়; MergeSort এবং QuickSort হ'ল NlogN, এবং RadixSort সাধারণত রৈখিক হিসাবে বিবেচিত হয় (প্রযুক্তিগতভাবে এটি NlogM যেখানে এম এন এর মধ্যে বৃহত্তম সংখ্যা)।
  • দ্রুত বিরতি দিন - যদি এমন কোনও চেক পাওয়া যায় যা সস্তা ব্যয়ে সস্তাভাবে করা যায় যা উল্লেখযোগ্যভাবে সত্য হওয়ার সম্ভাবনা থাকে এবং এর অর্থ আপনি এগিয়ে যেতে পারেন তবে প্রথমে সেই চেকটি তৈরি করুন। উদাহরণস্বরূপ, যদি আপনার অ্যালগরিদম কেবলমাত্র 1, 2, বা 3 এর মধ্যে শেষ হওয়া সংখ্যার বিষয়ে যত্নশীল হয় তবে সর্বাধিক সম্ভাব্য কেস (সম্পূর্ণ র্যান্ডম ডেটা দেওয়া হয়) এমন একটি সংখ্যা যা অন্য কোনও অঙ্কে শেষ হয়, সুতরাং পরীক্ষা করুন যে সংখ্যাটি শেষ হয় না 1, 2, বা 3, কোনও পরীক্ষা করার আগে সংখ্যাটি 1, 2, বা 3 এ শেষ হয় কিনা তা পরীক্ষা করে দেখার জন্য যদি কোনও যুক্তির জন্য A&B, এবং P (A) = 0.9 প্রয়োজন হয় তবে P (B) = 0.1 হয়, তবে চেক করুন বি প্রথমে, যদি না হয়! যদি না! তবে (বি if(myObject != null && myObject.someProperty == 1)), বা বি ( if(myObject != null && some10SecondMethodReturningBool())) মূল্যায়ন করতে A এর চেয়ে 9 গুণ বেশি সময় নেয় ।
  • আপনি ইতিমধ্যে উত্তরটি জানেন এমন কোনও প্রশ্ন জিজ্ঞাসা করবেন না - যদি আপনার "ক্রল-থ্রু" শর্তগুলির একটি সিরিজ থাকে এবং এই শর্তগুলির এক বা একাধিক একটি সহজ শর্তের উপর নির্ভরশীল যা অবশ্যই পরীক্ষা করা উচিত, উভয়ই চেক করবেন না এই স্বাধীনভাবে। উদাহরণস্বরূপ, আপনার যদি একটি চেক থাকে যা A এর প্রয়োজন হয় এবং যে চেকটির জন্য A&&B প্রয়োজন, আপনার অবশ্যই A টি পরীক্ষা করা উচিত এবং যদি সত্য হয় তবে আপনার বি। চেক করা উচিত, যদি! তবে, A&&B, তাইও বিরক্ত করবেন না।
  • আপনি যতবার কিছু করেন না কেন এটি কীভাবে হয়েছিল তার দিকে তত বেশি মনোযোগ দেওয়া উচিত - এটি অনেক স্তরে বিকাশের একটি সাধারণ থিম; একটি সাধারণ বিকাশের অর্থে, "যদি কোনও সাধারণ কাজ সময়সাপেক্ষ বা নির্লিপ্তভাবে হয় তবে আপনি যতক্ষণ না হতাশ এবং যথেষ্ট জ্ঞানবান উভয়ই একটি ভাল উপায় নিয়ে আসতে পারেন ততক্ষণ এটি চালিয়ে যান"। কোড পদে, যতবার অদক্ষ অ্যালগরিদম চালানো হয়, তত বেশি আপনি এটির অনুকূলিতকরণের মাধ্যমে সামগ্রিক পারফরম্যান্সে অর্জন করতে পারবেন। কিছু প্রোফাইল সরঞ্জাম রয়েছে যা বাইনারি সমাবেশ এবং এর ডিবাগ প্রতীক নিতে পারে এবং কিছু ব্যবহারের ক্ষেত্রে চালিয়ে যাওয়ার পরে, কোডের কোন লাইনে সর্বাধিক চালিত হয়েছিল তা আপনাকে দেখাতে পারে। এই রেখাগুলি এবং সেই লাইনগুলি যে রেখাগুলি চালায়, সেগুলি হ'ল আপনাকে কীভাবে সবচেয়ে বেশি মনোযোগ দেওয়া উচিত, কারণ সেখানে দক্ষতার যে কোনও বৃদ্ধি আপনি বহুগুণে বৃদ্ধি পাবে।
  • যদি আপনি এটিতে যথেষ্ট পরিমাণ হার্ডওয়ার ফেলে দেন তবে আরও জটিল অ্যালগরিদম কম জটিল অ্যালগরিদমের মতো দেখায় । কিছু সময় আছে যখন আপনার কেবল বুঝতে হবে যে আপনার অ্যালগরিদম সিস্টেমটির প্রযুক্তিগত সীমাতে (বা এর অংশ) পৌঁছেছে যে আপনি এটি চালাচ্ছেন; সেই জায়গা থেকে যদি এটি দ্রুত হওয়ার দরকার হয় তবে আপনি এটিকে আরও ভাল হার্ডওয়ারে চালিয়ে আরও কিছু অর্জন করতে পারবেন। এটি সমান্তরালতার ক্ষেত্রেও প্রযোজ্য; একটি এন 2- কমপ্লেক্সিটি অ্যালগরিদম, যখন এন কোরগুলিতে চালানো হয় তখন লিনিয়ার দেখায়। সুতরাং, আপনি যদি নিশ্চিত হন যে আপনি যে ধরণের অ্যালগোরিদম লিখছেন তার জন্য আপনি কম জটিলতায় আবদ্ধ হয়েছেন, "বিভাজন এবং বিজয়" করার উপায়গুলি সন্ধান করুন।
  • এটি যথেষ্ট দ্রুত যখন দ্রুত হয় - আপনি যদি কোনও নির্দিষ্ট চিপকে টার্গেট করতে হ্যান্ড-প্যাকিং অ্যাসেম্বলি না করেন তবে সবসময়ই কিছু অর্জন করা উচিত। তবে, আপনি হ্যান্ড-প্যাকিং সমাবেশ হতে না চাইলে আপনার ক্লায়েন্টটি কী "যথেষ্ট ভাল" বলবে তা সর্বদা আপনার মনে রাখতে হবে। আবার, "অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল"; যখন আপনার ক্লায়েন্ট এটিকে যথেষ্ট দ্রুত কল করে, আপনি যতক্ষণ না মনে করেন যে এটি এত দ্রুত আর দ্রুত না করে আপনি কাজ শেষ করেছেন।

0

কেবলমাত্র অপ্টিমাইজেশন সম্পর্কে চিন্তার একমাত্র সময় হ'ল আপনি যখন জানেন যে আপনি এমন বিশাল কিছু নিয়ে কাজ করছেন যা আপনি জানেন যে কোনও কোনও সময় প্রচুর পরিমাণে কার্যকর হবে।

"বিশাল" সংজ্ঞাটি আপনার টার্গেট সিস্টেমগুলি কেমন তা নির্ভর করে স্পষ্টতই পরিবর্তিত হয়।


0

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

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