Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中检查代码性能的正确方法#_C#_Performance_Memory_Cpu Usage - Fatal编程技术网

C# C语言中检查代码性能的正确方法#

C# C语言中检查代码性能的正确方法#,c#,performance,memory,cpu-usage,C#,Performance,Memory,Cpu Usage,假设我有两段代码,我想检查这些代码的CPU使用率和内存,并进行比较,这是检查性能的好方法吗: public class CodeChecker: IDisposable { public PerformanceResult Check(Action<int> codeToTest, int loopLength) { var stopWatch = new Stopwatch(); stopWatch.Start();

假设我有两段代码,我想检查这些代码的CPU使用率和内存,并进行比较,这是检查性能的好方法吗:

public class CodeChecker: IDisposable
{


    public PerformanceResult Check(Action<int> codeToTest, int loopLength)
    {

        var stopWatch = new Stopwatch();

        stopWatch.Start();

        for(var i = 0; i < loopLength; i++)
        {
            codeToTest.Invoke(i);
        }

        stopWatch.Stop();
        var process = Process.GetCurrentProcess();

        var result = new PerformanceResult(stopWatch.ElapsedMilliseconds, process.PrivateMemorySize64);
        return result;

    }
}

public class PerformanceResult
{
    public long DurationMilliseconds { get; set; }
    public long PrivateMemoryBytes { get; set; }

    public PerformanceResult(long durationMilliseconds, long privateMemoryBytes)
    {
        DurationMilliseconds = durationMilliseconds;
        PrivateMemoryBytes = privateMemoryBytes;
    }


    public override string ToString()
    {
        return $"Duration: {DurationMilliseconds} - Memory: {PrivateMemoryBytes}";
    }
}
公共类CodeChecker:IDisposable
{
公共性能结果检查(操作代码测试,int loopLength)
{
var stopWatch=新秒表();
秒表。开始();
对于(变量i=0;i
以及:

static void Main(字符串[]args)
{
控制台。WriteLine(“开始!”);
int loopLength=10000000;
var collection=newdictionary();
绩效结果;
使用(var codeChecker=new codeChecker())
{
结果=codeChecker.Check((inti)=>collection.Add(i,newtarget()),loopLength);
}
WriteLine($“Dict Performance:{result}”);
var list=新列表();
使用(var codeChecker=new codeChecker())
{
result=codeChecker.Check((inti)=>list.Add(newtarget()),loopLength);
}
WriteLine($“列表性能:{result}”);
Console.ReadLine();
}
我正在寻找以编程方式检查性能的方法,我希望检查一段代码,特别是不是所有的应用程序

有任何改进上述代码的建议吗


我愿意接受任何关于使用免费工具的建议。

有很多因素可能会对您的度量造成偏差,包括CLR和JIT编译器影响、堆状态、冷运行或热运行、系统中的总体负载、,等等。理想情况下,您需要将要进行基准测试的代码片段彼此隔离,以排除相互影响,只对热运行进行基准测试,not cold排除JIT编译和其他冷运行因素,最重要的是您需要进行多次运行以获得统计信息,因为单次运行可能不具有代表性,特别是在一个意味着多任务的系统上。幸运的是,您不必手动完成所有操作-基准测试非常有用,它可以完成所有提到的事情,并且在各种.NET项目中广泛使用。

有很多因素可能会对您的度量造成偏差,包括CLR和JIT编译器影响、堆状态、冷运行或热运行,系统中的总体负载等。理想情况下,您需要将要进行基准测试的代码片段彼此隔离,以排除相互影响,只对热运行进行基准测试,not cold排除JIT编译和其他冷运行因素,最重要的是您需要进行多次运行以获得统计信息,因为单次运行可能不具有代表性,特别是在一个意味着多任务的系统上。幸运的是,您不必手动完成所有工作-基准测试非常有用,它可以完成所有提到的事情,而且还可以做更多的事情,广泛应用于各种.NET项目中

static void Main(string[] args)
{
    Console.WriteLine("Start!");
    int loopLength = 10000000;

    var collection = new Dictionary<int, Target>();


    PerformanceResult result;
    using (var codeChecker = new CodeChecker())
    {
        result = codeChecker.Check((int i) => collection.Add(i, new Target()) , loopLength);
    }

    Console.WriteLine($"Dict Performance: {result}");


    var list = new List<Target>();
    using(var codeChecker = new CodeChecker())
    {
        result = codeChecker.Check((int i) => list.Add(new Target()), loopLength);
    }

    Console.WriteLine($"List Performance: {result}");
    Console.ReadLine();
}