কম্পিউটার টিউটোরিয়াল

C#-এ মেথড এক্সিকিউশন টাইম মাপা (Stopwatch ক্লাস)

System.Diagnostics.Stopwatch ক্লাস হাই-রেজোলিউশন টাইমার প্রদান করে যা কোড এক্সিকিউশন টাইম মাপার জন্য আদর্শ। এটি CPU সাইকেল বা হাই-প্রিসিশন হার্ডওয়্যার টাইমার ব্যবহার করে।

বেসিক ব্যবহার


using System;
using System.Diagnostics;

var stopwatch = Stopwatch.StartNew(); // শুরু + তৈরি একসাথে

// কোড যা মাপতে চান
DoWork();

stopwatch.Stop();
Console.WriteLine($"এলাপসড টাইম: {stopwatch.ElapsedMilliseconds} ms");
// অথবা
Console.WriteLine($"এলাপসড: {stopwatch.Elapsed}"); // TimeSpan ফরম্যাট

সম্পূর্ণ উদাহরণ


using System;
using System.Diagnostics;
using System.Threading;

public class Demo
{
    public static void Main(string[] args)
    {
        var sw = Stopwatch.StartNew();
        
        // সিমুলেটেড কাজ
        Display();
        
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine($"সময়: {sw.ElapsedMilliseconds} ms");
            Thread.Sleep(100); // ১০০ মিলিসেকেন্ড দেরি
        }
        
        sw.Stop();
        Console.WriteLine($"\nমোট এলাপসড: {sw.Elapsed}");
        Console.WriteLine($"মোট মিলিসেকেন্ড: {sw.ElapsedMilliseconds}");
        Console.WriteLine($"মোট টিকস: {sw.ElapsedTicks}");
    }
    
    public static void Display()
    {
        Console.WriteLine("ডেমো ফাংশন!");
        Thread.Sleep(50);
    }
}

আউটপুট উদাহরণ


ডেমো ফাংশন!
সময়: 51 ms
সময়: 152 ms
সময়: 253 ms
সময়: 354 ms
সময়: 455 ms

মোট এলাপসড: 00:00:00.4552312
মোট মিলিসেকেন্ড: 455
মোট টিকস: 1138078

Stopwatch প্রপার্টি রেফারেন্স

প্রপার্টি/মেথডব্যাখ্যা
StartNew()নতুন ইনস্ট্যান্স তৈরি করে এবং শুরু করে (স্ট্যাটিক ফ্যাক্টরি)
Start()রুকা हुआ স্টপওয়াচ শুরু করে
Stop()স্টপওয়াচ বন্ধ করে
Reset()শূন্য করে এবং বন্ধ করে
Restart()Reset() + Start() একসাথে
ElapsedTimeSpan রিটার্ন করে (উচ্চ প্রিসিশন)
ElapsedMillisecondsলং আকারে মিলিসেকেন্ড
ElapsedTicksর حم টাইমার টিকস (CPU ফ্রিকোয়েন্সি-নির্ভর)
IsRunningচালু আছে কিনা

বেঞ্চমার্কিং-এর জন্য সেরা অনুশীলন


using System.Diagnostics;
using System.Runtime.CompilerServices;

public static class Benchmark
{
    public static double Measure(Action action, int iterations = 1000)
    {
        // WARm-up (JIT কম্পাইলেশন, ক্যাশে ফিলআপ)
        for (int i = 0; i < 10; i++) action();
        
        var sw = Stopwatch.StartNew();
        for (int i = 0; i < iterations; i++)
        {
            action();
        }
        sw.Stop();
        
        return sw.Elapsed.TotalMilliseconds / iterations; // গড়ে মিলিসেকেন্ড
    }
}

// ব্যবহার
double avgMs = Benchmark.Measure(() => 
{
    // টেস্ট কোড এখানে
    var sum = 0;
    for (int i = 0; i < 1000; i++) sum += i;
}, 10000);

Console.WriteLine($"গড়ে প্রতি কল: {avgMs:F4} ms");

BenchmarkDotNet - প্রোফেশনাল বেঞ্চমার্কিং (সুপারিশ করা)


// NuGet: BenchmarkDotNet
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

[MemoryDiagnoser]
public class MyBenchmarks
{
    [Benchmark]
    public void StringConcat() => string.Concat("a", "b", "c");
    
    [Benchmark]
    public void StringInterpolation() => $"{"a"}{"b"}{"c"}";
}

// রান করতে
BenchmarkRunner.Run<MyBenchmarks>();

সাধারণ ভুল এড়ান

  • DateTime.Now ব্যবহার করা (কম প্রিসিশন, সিস্টেম ক্লক চেঞ্জের আশ্রয়ী) → Stopwatch ব্যবহার করুন
  • वार্ম-আপ ছাড়া বেঞ্চমার্ক করা (JIT কম্পাইলেশন ফলাফল বিকৃত করে)
  • Debug বিল্ডে বেঞ্চমার্ক করা (অপ্টিমাইজেশন অফ থাকে) → Release বিল্ডে রান করুন
  • খুব কম ইটারেশন (নויז বেশি) → ন্যূনতম ১০০০+ ইটারেশন
  1. এন্ড্রয়েডে সময় (Time) পরিবর্তন করার পদ্ধতি

  2. জাভা মেথডের এক্সিকিউশন টাইম মাপার পদ্ধতি

  3. পাইথন প্রোগ্রাম রাউন্ড ট্রিপ টাইম (RTT) ক্যালকুলেট করার জন্য

  4. পাইথন কোডের এক্সিকিউশন স্পিড কীভাবে মাপবেন?