【问题标题】:BenchmarkDotNet with async task具有异步任务的 BenchmarkDotNet
【发布时间】:2018-03-28 14:00:03
【问题描述】:

我正在尝试运行此代码:

public class Parsing
{
    private const string Url ="blabla";
    private static HttpClient client = new HttpClient();

    private static Task<string> newton = ParseNewton();
    private static Task<string> servicestack = ParseServiceStack();

    [Benchmark]
    private static async Task<string> ParseNewton()
    {

        var response = client.GetAsync(Url).Result;

        var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

        var serializer = new Newtonsoft.Json.JsonSerializer();

        using (var sr = new StreamReader(stream))
        using (var jsonTextReader = new JsonTextReader(sr))
        {
            return serializer.Deserialize<string>(jsonTextReader);
        }

    }

    [Benchmark]
    private static async Task<string> ParseServiceStack()
    {

        var response = client.GetAsync(Url).Result;

        var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

        return ServiceStack.Text.JsonSerializer.DeserializeFromStream<string>(stream);

    }
}

电话是

internal class Program
{
    public static void Main(string[] args)
    {
        var summary = BenchmarkRunner.Run<Parsing>();

        Console.ReadKey();
    }
}

我很确定我做错了很多事情(因为它不起作用);我总是收到未找到基准的消息,并且从我发现的样本中我找不到如何使其工作。

我想反序列化来自 NewtonSoft 和 ServiceStack 给出的 url 的相同响应的 1000 倍,并从中获得良好的基准。我怎样才能使这段代码工作,我做错了什么?

【问题讨论】:

  • private这两个方法改成public有帮助吗?我看到的例子也没有使用静态方法。 BenchmarkDotNet 将创建该类的一个实例。
  • 它有效...不敢相信我在这上面浪费了 30 分钟。非常感谢!

标签: c# benchmarkdotnet


【解决方案1】:

类和方法都需要是公共的,不能是静态的。类也不能被密封。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多