পদ্ধতির শেষে আমার স্টপওয়াচ বন্ধ করা উচিত?


89

আসুন কল্পনা করুন যে আমাদের ব্যবহার করে সাধারণ পরিমাপ রয়েছে Stopwatch

public void DoWork()
{
    var timer = Stopwatch.StartNew();
    // some hard work
    Logger.Log("Time elapsed: {0}", timer.Elapsed);
    timer.Stop(); // Do I need to call this?
}

এমএসডিএন অনুসারে:

একটি সাধারণ স্টপওয়াচ দৃশ্যে, আপনি স্টার্ট পদ্ধতিটি কল করেন এবং শেষ পর্যন্ত স্টপ পদ্ধতিটি কল করুন এবং তারপরে আপনি অতিবাহিত সম্পত্তি ব্যবহার করে সময় অতিবাহিত করবেন।

আমি যখন টাইমার উদাহরণের সাথে আর আগ্রহী না তখন আমার এই পদ্ধতিটি কল করা উচিত কিনা তা আমি নিশ্চিত নই। Stopপদ্ধতিটি ব্যবহার করে আমার কি "ক্লিয়ার আপ" করা উচিত ?

সম্পাদনা

মনে রাখবেন লগার.লগ (..) এর জন্য কোনও খরচ হয় না কারণ লগার লগ হওয়ার আগেtimer.Elapsed পড়া হয় ।


4
Stopউদ্বেগহীন ভুল থেকে পদ্ধতি প্রতিরোধ আপনি উদাহরণস্বরূপ, আপনার মূল্যায়ন করছি Elapsedসম্পত্তি একাধিক বার।
টিম শেমলেটার


যেহেতু টাইমার সুযোগের বাইরে চলে যাচ্ছে, কেন আপনি বিশ্বাস করেন যে কল করা Stopকোনও পার্থক্য করবে? আপনি যেভাবেই মানটি ব্যবহার করতে পারবেন না
ডিফল্ট

উত্তর:


81

না, আপনার এটি বন্ধ করার দরকার নেই। Stop()কেবল সময় অতিবাহিত হওয়া বন্ধ করে দেয়। এটি কোনও সংস্থান মুক্ত করে না।


4
তবে অসতর্ক ভুলগুলি রোধ করতে এটি যেভাবেই ব্যবহার করা ভাল অনুশীলন।
টিম শ্মেলেটার

12
এটি কিছুতেই বাধা দেয় না, তিনি পদ্ধতিতে স্টপওয়াচ তৈরি করছেন এবং এটিকে ফিরিয়ে দিচ্ছেন না, সুতরাং "এর সাথে ভুল করতে" তিনি পরে এটি ধরে রাখতে সক্ষম হবেন না।
রোনান থাইবাডাউ

21
এছাড়াও স্টপওয়াচ কোনও কাজ করছে না বা স্টার্ট () এবং স্টপ () এর কলগুলির মধ্যে সিপিইউ ক্লক সাইকেল খাচ্ছে না। শুরু () এখনই একটি টাইমস্ট্যাম্প সেট করে এবং স্টপ () তার পর থেকে সময় কাটানো গণনা করে এবং সংরক্ষণ করে। কোরল্লিকার উত্স দেখুন: github.com/dotnet/corefx/blob/master/src/…
সামি

42

না, এটি বন্ধ বা পরিষ্কার করার দরকার নেই।

Stopwatchকোনও পরিচালনা না করা সংস্থান ব্যবহার করে না (যদি আপনি ভেবে থাকেন IDisposable)। এটি আসলে কোনও সংস্থান ব্যবহার করে না (অবশ্যই বস্তুর দ্বারা ব্যবহৃত স্মৃতি ব্যতীত)! অতিবাহিত সময় পরিমাপ করার সময় এটি কোনও সিপিইউ গ্রাস করে না!

.NET (সম্পূর্ণ .NET ফ্রেমওয়ার্ক, মনো, .নেট কোর) জানালা বাস্তবায়নের, এটা ঠিক আহ্বান QueryPerformanceCounter()উইন্ডোস API প্রয়োজন হলে (চালু Start()এবং Stop()যখন পড়া Elapsed) একটি হাই রেজোলিউশনের সময় স্ট্যাম্প উদ্ধার করতে।

মনো এবং .NET কোর এর লিনাক্স বাস্তবায়নে এটি clock_gettimeএকঘেয়ে বর্ধমান সময়ের মূল্য পুনরুদ্ধার করতে ফাংশন ব্যবহার করে।

বাস্তবায়নের বিশদ সম্পর্কে বাস্তব কৌতূহল সহ যে কারও কাছে: এই পোস্টটি পড়ুন


5

আমার মনে হয় আপনি যদি অতিবাহিত মানটির পুনরায় ব্যবহার করতে চান তবে স্টপ দরকারী।


তবে আমার উদাহরণে আমার দরকার নেই :)
দরিউজ

তারপরে এটি দুর্দান্ত :), আমার "কেবলমাত্র" ব্যবহার করা উচিত ছিল ক্লাসটি ডিসপোজ ইন্টারফেস প্রয়োগ করে না, সুতরাং কোনও ক্লিনআপ ট্রিগার করা উচিত নয়।
ভিভিভি

4
@vvv আপনি যদি চান তবে আপনার উত্তরটিতে এটি যুক্ত করতে পারেন - উত্তর এবং মন্তব্যের মধ্যে একটি বোতাম রয়েছে যা "সম্পাদনা" বলে।
ডিফল্ট

0

যদি আপনার কোড গণনা করার প্রয়োজন না হয় তবে স্টপ () ব্যবহার করার দরকার নেই।

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