是否有.net c#分析器可以为泛型方法的不同类型执行报告单独的统计信息?

本文关键字:执行 同类型 报告单 信息 统计 泛型方法 net 分析器 是否 | 更新日期: 2023-09-27 18:08:23

假设我有一个简单的程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProfilerTesting
{
    class Program
    {
        static void MyFunc<T>(T t)
        {
            System.Threading.Thread.Sleep(100);
            Console.WriteLine(t);
        }
        static void Main(string[] args)
        {
            IList<string> l = new List<string> { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m" };
            foreach (string s in l)
            {
                MyFunc(s);
            }
            IList<int> g = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            foreach (int i in g)
            {
                MyFunc(i);
            }
        }
    }
}

当我在采样模式下使用。net分析器分析这个程序时(我已经尝试了EQUATEC分析器免费版本和Visual Studio性能工具),它只给我MyFunc<T>的总执行统计数据。是否有任何方法可以获得MyFunc<string>MyFunc<int>的单独执行统计数据?

是否有.net c#分析器可以为泛型方法的不同类型执行报告单独的统计信息?

我不知道有什么工具可以做到这一点,而且我实际上不认为这是可能的。

如果你看一下方法的泛型定义,你会发现

泛型方法定义是具有两个参数列表的方法:泛型类型参数列表和形式参数列表。类型参数可以显示为返回类型,也可以显示为形式参数的类型,如下面的代码所示。

我们可以将你的问题改写为"是否有可能通过不同的参数值来区分调用堆栈函数?"答案是否定的。当然,这在某种程度上是可能的,但没有人会实现这一点,因为数据量非常大,分析这些数据真的很难。

在调用堆栈中,当我们有MyFunc时,我们总是只能发现这是MyFunc<T>(T t),没有任何关于参数(类型或形式)的信息。

对于您的情况,如果您想单独测量性能,最好将此方法分为两个。