স্থির পদ্ধতি বনাম উদাহরণ পদ্ধতিগুলির পারফরম্যান্স


108

আমার প্রশ্ন স্থির পদ্ধতি বনাম উদাহরণ পদ্ধতিগুলির কার্যকারিতা বৈশিষ্ট্য এবং তাদের স্কেলিবিলিটি সম্পর্কিত। এই দৃশ্যের জন্য ধরে নিন যে সমস্ত শ্রেণি সংজ্ঞাগুলি একটি একক সমাবেশে এবং একাধিক বিচ্ছিন্ন পয়েন্টার ধরণের প্রয়োজন।

বিবেচনা:

public sealed class InstanceClass
{
      public int DoOperation1(string input)
      {
          // Some operation.
      }

      public int DoOperation2(string input)
      {
          // Some operation.
      }

      // … more instance methods.
}

public static class StaticClass
{
      public static int DoOperation1(string input)
      {
          // Some operation.
      }

      public static int DoOperation2(string input)
      {
          // Some operation.
      }

      // … more static methods.
}

উপরের ক্লাসগুলি একটি সহায়ক শৈলীর নিদর্শন উপস্থাপন করে।

একটি উদাহরণ ক্লাসে, ইনস্ট্যান্স পদ্ধতিটি সমাধান করা স্ট্যাটিক ক্লাসের বিরোধিতা হিসাবে কিছুটা সময় নেয়।

আমার প্রশ্নগুলি হ'ল:

  1. যখন রাষ্ট্র বজায় রাখা উদ্বেগের বিষয় না (কোনও ক্ষেত্র বা সম্পত্তি প্রয়োজন হয় না), স্থির শ্রেণি ব্যবহার করা কি সর্বদা ভাল?

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

  3. একই উদাহরণ শ্রেণীর মধ্যে যখন অন্য একটি পদ্ধতি বলা হয়, তখনও উদাহরণের রেজোলিউশনটি ঘটে? উদাহরণস্বরূপ [ একই ] কীওয়ার্ডটি একই উদাহরণের মধ্যে this.DoOperation2("abc")থেকে পছন্দ করে DoOperation1



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

> vijaymukhi.com/documents/books/ilbook/chap8.htm এবং 'কল দৃষ্টান্ত' বনাম কেবল 'কল'। প্রাক্তনটি 'এই' পরামিতিটি এবং পরবর্তীটি প্রত্যাশা করে।
কোয়েটজলকোটল

@ কুয়েজটালকোটল এই বিভ্রান্তির জন্য দুঃখিত, প্রশ্নটি একই উদাহরণ থেকে পদ্ধতিটির আরও পদ্ধতি ছিল এবং যদি প্রয়োজনটির সমাধানটি নিজেই সমাধান করা প্রয়োজন।
বার্নি হোয়াইট

1
@ কোয়েটজলকোটল আমি ধরে নিয়েছিলাম তার অর্থ, " thisক্লাস যখন কোনও ক্লাস নিজেই একটি উদাহরণ পদ্ধতি বলছে তখন কি সেই বিষয়টির বিষয়ে উল্লেখ করে তা থেকে মুক্তি পাবে ?"
জন হান্না

উত্তর:


152

তত্ত্ব অনুসারে, অতিরিক্ত লুকানো thisপ্যারামিটারের কারণে একটি স্থিতিশীল পদ্ধতিটি উদাহরণের পদ্ধতির চেয়ে কিছুটা ভাল সম্পাদন করা উচিত, অন্য সমস্ত জিনিস সমান ।

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

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

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

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

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

আইটেম 3 সঙ্গে, thisহিসাবে thisআছে। তবে দ্রষ্টব্য:

  1. thisপরামিতি একটি নির্দিষ্ট রেজিস্টার পাস করা হয়। একই ক্লাসের মধ্যে একটি উদাহরণ পদ্ধতি কল করার সময়, সম্ভবত এটি ইতিমধ্যে সেই রেজিস্টারে থাকবে (যদি তা স্ট্যাশ করা না হয় এবং কোনও কারণে নিবন্ধক ব্যবহার না করা হয়) এবং সুতরাং thisএটিতে সেট করার দরকার নেই তে সেট করার জন্য কোনও পদক্ষেপ নেই । এটি একটি নির্দিষ্ট পরিমাণে প্রযোজ্য উদাহরণের জন্য প্রথম দুটি পরামিতি যে কলটি করা হয় তার প্রথম দুটি পরামিতি method

  2. যেহেতু এটি পরিষ্কার হবে যে thisএটি নাল নয়, এটি কিছু ক্ষেত্রে কলগুলি অনুকূল করতে ব্যবহৃত হতে পারে।

  3. যেহেতু এটি স্পষ্ট হবে যে thisএটি নাল নয়, সুতরাং এটি ইনডিল পদ্ধতিতে কলগুলি আরও কার্যকর করতে পারে, কারণ পদ্ধতি কলটি তৈরির জন্য উত্পন্ন কোডটি যে কোনওভাবে নাল-চেকের প্রয়োজন হতে পারে তা বাদ দিতে পারে।

  4. বলেছিল, নাল চেকস সস্তা!

এটি লক্ষণীয় যে জেনেরিক স্ট্যাটিক পদ্ধতিগুলি কোনও বস্তুর উপর কাজ করে উদাহরণস্বরূপ পদ্ধতিগুলির পরিবর্তে http://joeduffyblog.com/2011/10/23/on-generics- এবং- some- of- এ আলোচিত কিছু ব্যয় হ্রাস করতে পারে সম্পর্কিত-ওভারহেডস / সেই ক্ষেত্রে যেখানে প্রদত্ত স্ট্যাটিক কোনও নির্দিষ্ট ধরণের জন্য ডাকা হয় না। তিনি যেমন এটি রেখেছেন "একদিকে যেমন, এটি প্রমাণিত হয় যে জেনেরিক বিমূর্ততা আরও বেশি প্লে-প্লে করার জন্য এক্সটেনশন পদ্ধতিগুলি দুর্দান্ত উপায়।"

তবে নোট করুন যে এটি কেবল পদ্ধতি দ্বারা ব্যবহৃত অন্য ধরণের ইনস্ট্যান্টেশনের সাথে সম্পর্কিত, যা অন্যথায় বিদ্যমান নেই। যেমনটি, এটি সত্যিই প্রচুর ক্ষেত্রে প্রযোজ্য হয় না (অন্য কোনও উদাহরণ পদ্ধতি সেই ধরণের ব্যবহৃত হয়, অন্য কোনও কোড অন্য কোথাও এই ধরণের ব্যবহার করে)।

সারসংক্ষেপ:

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

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


স্থির বনাম উদাহরণস্বরূপ প্রশ্নের ক্যাশে সংহতিতে কোনও প্রভাব আছে কিনা তা সম্পর্কে আপনি মন্তব্য করতে পারেন? এক বা অন্যের উপর নির্ভরতা কি ক্যাশে মিস করার সম্ভাবনা বেশি? এখানে কেন একটি ভাল রূপরেখা ব্যাখ্যা করা হচ্ছে?
স্ক্রিপ্টোক্যালপস

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

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

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

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

8

যখন রাষ্ট্র বজায় রাখা উদ্বেগের বিষয় না (কোনও ক্ষেত্র বা সম্পত্তি প্রয়োজন হয় না), স্থির শ্রেণি ব্যবহার করা কি সর্বদা ভাল?

আমি বলব, হ্যাঁ staticকোনও কিছু ঘোষণার সাথে সাথে আপনি রাষ্ট্রবিহীন মৃত্যুদণ্ডের অভিপ্রায় ঘোষনা করুন (এটি বাধ্যতামূলক নয়, তবে এমন কোনও কিছুর একটি উদ্দেশ্য যা প্রত্যাশা করে)

এই স্ট্যাটিক ক্লাসগুলির একটি উল্লেখযোগ্য সংখ্যা রয়েছে (উদাহরণস্বরূপ 100 বলুন, প্রতিটি স্থির পদ্ধতিগুলির একটি সংখ্যা সহ) এটি একই সংখ্যার উদাহরণ শ্রেণীর তুলনায় মৃত্যুদণ্ড কার্যকরকরণ বা মেমরির ব্যবহারকে নেতিবাচকভাবে প্রভাবিত করবে?

এমনটি ভাববেন না, যদি না আপনি নিশ্চিত হন যে স্থির শ্রেণিগুলি সত্যই নিরলস, কারণ মেমরির বরাদ্দ সহজতর না হলে কারণ তৈরি করুন এবং মেমরি ফাঁস পান।

[এই] কীওয়ার্ডটি একই উদাহরণ শ্রেণীর মধ্যে অন্য কোনও পদ্ধতিতে কল করার জন্য ব্যবহৃত হয়, তখনও উদাহরণ রেজোলিউশনটি ঘটে?

নিশ্চিত নন, এই পয়েন্টটি সম্পর্কে (এটি সিএলআরের বিশুদ্ধ রূপায়ণ সম্পর্কিত বিশদ), তবে হ্যাঁ ভাবুন think


স্থিতিশীল পদ্ধতিগুলি উপহাস করা যায় না, আপনি যদি টিডিডি করেন বা এমনকি কেবল ইউনিট পরীক্ষা করে থাকেন তবে এটি আপনার পরীক্ষাগুলিকে অনেক ক্ষতি করবে।
ট্রাম্পস্টার

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

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

-2

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


16
আপনি আপনার দাবির পক্ষে কোনও যুক্তি দেননি।
ymajoros

2
@ fjch1997 2 জন আগত ব্যক্তি অন্যথায় ভাবেন বলে মনে হচ্ছে (এটির জন্য মূল্য কী)। ডাউনভোটগুলি
কোয়েশনস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.