আপনি কোথায় অনুকূলিত হন?


9

গতির পক্ষে সম্ভবত অনুকূলকরণের জন্য দুটি ক্ষেত্র রয়েছে:

  • যেখানে সবচেয়ে বেশি সময় ব্যয় হয়
  • যে কোডটি সর্বাধিক বলা হয়

অনুকূলকরণ শুরু করার জন্য সেরা জায়গা কোনটি?

প্রায়শই কোড বলা হয় এমন কোডের ইতিমধ্যে কম প্রয়োগের সময় রয়েছে। আপনি কি ধীর, কম বলা অঞ্চলগুলিকে অপ্টিমাইজ করেছেন বা দ্রুত, প্রচুর ব্যবহৃত অঞ্চলগুলির অনুকূলকরণে ব্যয় করছেন?


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

এটি একটি মান সমীকরণ - উত্তরটি হতে পারে। আপনার যখন সত্যিকারের বিশ্লেষণ না থাকে, তখন আপনার সেরা ধারণাগুলির সম্ভাব্য পরিশোধের ভিত্তিতে আপনি আপনার অন্ত্রের সাথে যান।
নিকোল

আমরাও। কোডটির সন্ধান করুন যা সেই সময়ের একটি বৃহত ভগ্নাংশ স্ট্যাকের মধ্যে রয়েছে।
মাইক ডুনলাভে

উত্তর:


4

আপনার 95% সময়ের ক্ষুদ্র দক্ষতা উপেক্ষা করা উচিত। প্রথমে এটি সঠিকভাবে কাজ করুন , তারপরে বিশ্লেষণ করুন ...

আপনার নকশা।

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

উদাহরণস্বরূপ, একটি 3 ডি গেম: আপনি যদি নিজের দৃশ্যের গ্রাফের জন্য সাধারণ ফ্ল্যাট অবজেক্টের তালিকা শুরু করেন তবে তুলনামূলকভাবে স্বল্প সংখ্যক অবজেক্টের জন্য আপনি অত্যন্ত খারাপ অভিনয় দেখতে পাবেন; তবে আপনি অঙ্কন করার সময় যদি ভলিউম শ্রেণিবিন্যাস (অষ্ট্রি বা বিভিএইচের মতো) এবং গাছের কুল অংশগুলি প্রয়োগ করেন তবে আপনি একটি বিশাল পারফরম্যান্স বৃদ্ধি পাবেন see

যখন আপনার নকশাটি সঠিক মনে হচ্ছে, তারপরে আপনি এখানে যেতে পারেন ...

নিম্ন-স্তরের যুক্তি।

নিম্ন-স্তরের অ্যালগরিদমগুলিও উল্লেখযোগ্য প্রভাব ফেলতে পারে। চিত্র প্রক্রিয়াকরণ করার সময়, উদাহরণস্বরূপ, আপনি যদি চিত্রটি ভুল ক্রমে পড়েন, আপনি ধ্রুবক L2 ক্যাশে মিস করতে গিয়ে ধীরে ধীরে ধীরে ধীরে পড়তে পারেন; আপনার ক্রিয়াকলাপকে পুনরায় অর্ডার করার অর্থ পারফরম্যান্সে দশগুণ বৃদ্ধি হতে পারে।

এই মুহুর্তে, প্রোফাইল এবং প্রোগ্রামটির বেশিরভাগ সময় ব্যয় করার জায়গাটি খুঁজে বের করুন এবং এটি নির্মূল করার জন্য কোনও উপায় সন্ধান করুন।


আমি যে প্রোগ্রামটিতে কাজ করছি তা সঠিক। আমরা এটি পারলে দ্রুততর করে তুলতে চাই, যেহেতু এটি একটি ওয়েবসার্ভিস যা 30s এর ওপরের দিকে চালাতে এক মিনিট সময় নিতে পারে।
মাইকেল কে

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

1
আমাদের কাছে একটি প্রোফাইলিং সরঞ্জাম রয়েছে। আমি এখনও এটি শিখছি এবং তথ্যগুলি দিয়ে কী করব। এটি আমার কাছে তুলনামূলকভাবে নতুন বিষয় এবং খুব আকর্ষণীয়।
মাইকেল কে

@ মিশেল: ভাল! আপনি সাফল্যজনক পারফরম্যান্সের টিউন করার পথে (আশা করি) আপনার পথে রয়েছেন! :)
হতাশ

+1: এটি আমি যা বলতে যাচ্ছিলাম তবে আরও স্পষ্টভাবে।
ডোমিনিক ম্যাকডোনেল

3

প্রথমে আপনার কোডটি কোথায় সময় কাটাচ্ছে তা জানতে একটি প্রোফাইলার চালান।

তারপরে, কোনটি অপ্টিমাইজ করা সহজ দেখায় তা দেখতে সেই জায়গাগুলি দেখুন।

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

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

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

যুক্ত করার জন্য সম্পাদিত: যেহেতু আপনার নির্দিষ্ট কার্যকারিতা রয়েছে যা দীর্ঘ সময় নিয়ে চলেছে, তাই 10 বা তত বার সময় ধরে নির্দিষ্ট ধাপটি সঞ্চালন করে উপরের পদক্ষেপগুলি করার চেষ্টা করুন।


2

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

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

আমি সাধারণত এই ধরণের জিনিসটি সম্পর্কে চিন্তা করি না (যতক্ষণ না আমার পারফরম্যান্স টিউনিং করা দরকার) যতক্ষণ না ঘটতে চলেছে তার আগে আমার কিছু ধারণা থাকে।


1

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

এবং যখন এই প্রয়োজনটি নিজেই প্রকাশ পায় এটি সাধারণত এটির জন্য ভাল ইঙ্গিতগুলি বহন করে যে ঠিক কীটি অপ্টিমাইজেশনের জন্য ডাকে।

সুতরাং উত্তরটি স্বাভাবিক: "এটি নির্ভর করে।"


1

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

আপনার বাস্তবায়ন ভাষাটি কী নিম্ন স্তরের উপর নির্ভর করে আপনার কী অংশগুলি সবচেয়ে বেশি ক্যাশে মিস করে তা খুঁজে বের করা উচিত। কলিং কোড একীভূত করা এখানে সহায়তা করবে।


1

সমস্যাটি হল "যেখানে বেশিরভাগ সময় ব্যয় করা হয়" শব্দগুচ্ছটি।

যদি এর অর্থ যদি "প্রোগ্রামের কাউন্টারটি বেশিরভাগ ক্ষেত্রে পাওয়া যায়" তবে আমি এমন প্রোগ্রামগুলি দেখেছি যেখানে বেশিরভাগ সময় স্ট্রিং-তুলনা, মেমরি-বরাদ্দ, গণিতের গ্রন্থাগারের ফাংশনে ব্যয় করা হত। অন্য কথায়, ফাংশনগুলি যা প্রতিদিনের প্রোগ্রামারটিকে কখনও স্পর্শ করা উচিত নয়।

যদি এর অর্থ হয় "যেখানে প্রোগ্রামার কোডটিতে এমন বিবৃতি কার্যকর করা হয় যা বেশিরভাগ সময় ব্যয় করে" এটি আরও কার্যকর ধারণা।

"কোডটিকে যে সর্বাধিক বলা হয়" এর ধারণার সাথে সমস্যাটি হ'ল এটি যে পরিমাণ সময় নেয় তা হ'ল এটি কতবার বলা হয় এবং কলটিতে প্রতি সময় কত সময় নেয় (ক্যালিজ এবং আই / ও সহ)) যেহেতু এটির সময় লাগে তা বিভিন্ন মাত্রার বিভিন্ন আদেশের পরিবর্তে পরিবর্তিত হতে পারে, কারণ এটির নাম্বারটি যতবার ডাকা হয় তা আপনাকে বোঝায় না যে এটি কতটা সমস্যা। ফাংশন এ 10 বার কল করা যেতে পারে এবং 0.1 সেকেন্ড সময় নিতে পারে, যখন ফাংশন বি 1000 বার বলা হয়ে একটি মাইক্রোসেকেন্ড নিতে পারে take

একটি জিনিস যা আপনাকে কোথায় দেখতে হবে তা বলবে: কোডের একটি লাইন যখনই সময় ব্যয় করে তখন তা স্ট্যাকের মধ্যে থাকে । সুতরাং, উদাহরণস্বরূপ, যদি কোডের একটি লাইন হট স্পট হয়, বা এটি যদি কোনও লাইব্রেরির ফাংশনে কল হয়, বা যদি এটি 30-স্তরের কল ট্রিতে 20 তম কল হয়, যদি তা 20% সময়ের জন্য দায়বদ্ধ থাকে , তবে এটি সময় 20% স্ট্যাকের মধ্যে রয়েছে। স্ট্যাকের এলোমেলো সময়ের নমুনাগুলির প্রতিটি এটির প্রদর্শনের 20% সুযোগ পাবে। আরও কী, যদি আই / ও-এর সময় নমুনাগুলি নেওয়া যায় তবে তারা আপনাকে দেখায় যে I / O এর জন্য কী অ্যাকাউন্ট, যা নষ্ট সিপিইউ চক্রের মতোই বা বেশি অপচয় হতে পারে।

আর এটি কতবার আহ্বান করা হয়েছে তা থেকে সম্পূর্ণ স্বাধীন।


'প্রতিদিনের প্রোগ্রামারটিকে কখনই স্পর্শ করা উচিত নয়' বলতে চাইলে আপনি কি স্পর্শ করবেন না বলে বোঝায়? এছাড়াও, স্ট্যাকের নমুনা দেওয়া কি ব্যবহারিক প্রোফাইলিং পদ্ধতি?
মাইকেল কে

@ মিশেল: হ্যাঁ, স্ট্যাকের নমুনা দেওয়া একটি পদ্ধতি যা আধুনিক প্রোফাইলারদের উপর ভিত্তি করে তৈরি করা হয়, যেমন জুম । এছাড়াও, সম্পূর্ণ ম্যানুয়াল আশ্চর্যজনকভাবে ভাল কাজ করে ।
মাইক ডুনলাভে

খুব আকর্ষণীয়. আমি এখন কিছু করতে পড়াশোনা করেছি!
মাইকেল কে

@ মিশেল: এটি যৌথ দায়বদ্ধতার আইনী ধারণার মতো। এক পর্যায়ে, পিসি কোনও নির্দেশনায় থাকার জন্য দায়বদ্ধতা কেবল সেই নির্দেশেরই নয়, স্ট্যাকের উপরে থাকা প্রতিটি কলেরই যৌথ দায়িত্ব। এগুলির যে কোনও একটি নির্মূল করা এটিকে সেই নির্দিষ্ট রাজ্যে প্রবেশ করা আটকাবে।
মাইক ডুনলাভে

0

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


0

আপনাকে সবচেয়ে বেশি সময় নিচ্ছে এমন কোডে কাজ করতে হবে। কোডটি উন্নতি করে যা কেবল রান সময়ের কয়েক শতাংশের জন্য থাকে কেবলমাত্র আপনাকে একটি ছোট উন্নতি দিতে পারে।

আপনি কি পরিমাপ করেছেন যাতে আপনি জানেন যে কোন কোডটি সবচেয়ে বেশি সময় নিচ্ছে?


0

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

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

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


0

আপনি যদি আপনার অপ্টিমাইজেশানের প্রচেষ্টায় ফিরতি চান তবে আপনাকে অবশ্যই সবচেয়ে বেশি সময় নেয় এমন কোডটি দেখতে হবে। আমার সাধারণ লক্ষ্য এমন একটি জিনিস যা সময় কমপক্ষে ৮০% সময় নেয়। আমি সাধারণত 10 বারের পারফরম্যান্স লাভকে লক্ষ্য করি। এই কোডটি কীভাবে ডিজাইন করা হয় তার মাঝে মাঝে এটির জন্য একটি বড় পরিবর্তন প্রয়োজন। এই ধরণের পরিবর্তন আপনাকে এমন কিছু দেয় যা মোটামুটি চারগুণ দ্রুত দৌড়ায়।

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

ইতিমধ্যে দ্রুত অ্যাপ্লিকেশনটির অনুকূলকরণ বোকামির কাজ হতে পারে। আমি এখনও সর্বাধিক সময় নিয়ে অঞ্চলটিকে লক্ষ্য করব। যদি আপনি তাত্ক্ষণিকভাবে ফিরে আসতে 10% সময় ব্যবহার করে কিছু নিতে পারেন তবে আপনার এখনও 90% সময় প্রয়োজন। আপনি দ্রুত হ্রাসকারী রিটার্নের নিয়মটি আঘাত করেছেন।

বিধিটির জন্য আপনি কী অপটিমাইজ করছেন তার উপর নির্ভর করে এখনও প্রযোজ্য। প্রধান সংস্থান ব্যবহারকারীদের সন্ধান করুন এবং তাদের অনুকূলিত করুন। যদি আপনি যে সংস্থানটি অপ্টিমাইজ করছেন সেটি হ'ল সিস্টেমগুলি বাধা you


0

সাধারণত এটি বেশিরভাগ ক্ষেত্রে মেডিয়ার ফাংশন হতে চলেছে, ফাংশনগুলিকে প্রায়শই প্রায় এক বিলিয়ন বার বলা হয় না op

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

এই ফাংশনটি প্রায়শই অপ্টিমাইজেশান থেকে খুব বেশি উপকারে আসবে না। খুব কমপক্ষে সেই দানাদার হটস্পটগুলি খুব কমই শীর্ষ অগ্রাধিকার are এটি সেই পাতার ফাংশনকে কল করা ফাংশন যা সমস্যা সমাধানকারী হতে পারে বা ফাংশনটিকে কল করে ফাংশনটিকে কল করে একটি উপ-অনুকূল ছাঁকানো অ্যালগরিদমের মতো। ভাল সরঞ্জামের সাহায্যে আপনি কলি থেকে কলার পর্যন্ত ড্রিল করতে পারেন এবং এটিও দেখতে পারেন কে সবচেয়ে বেশি সময় ব্যয় করে কলিকে calling

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

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

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

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