1

我正在开发一个由多个项目组成的应用程序,并使用 EntityFramework 和 dotConnect 来针对 PostgreSQL 运行。我还有一个 dotConnect 许可证,它可以在主应用程序中成功运行。

同时,我正在使用 Benchmark.Net 制作一个控制台应用程序(一种不同的解决方案)来衡量其中一个项目的逻辑性能。但是每次我运行基准测试时,我都会收到以下错误:

System.Reflection.TargetInvocationException:调用的目标已引发异常。---> System.Data.Entity.Core.EntityException:底层提供程序在打开时失败。---> Devart.Data.PostgreSql.PgSqlException:包含嵌入式 dotConnect for PostgreSQL 许可证的程序集不能用于此应用程序:0f238e83-669a-46b8-876f-40331880ee79.exe.exe。

按照这个说明,我已经licenses.licx通过 Visual Studio 和<exe file>.licenses通过lc.exe. 但它仍然产生同样的错误。

我怀疑 Benchmark.NET 会生成自己的 exe 来运行导致此错误的基准测试,但我不确定 100%。因此,如果有人有解决方案,我正在寻找解决方案?

谢谢

4

1 回答 1

3

我不确定为执行数据库调用等的代码创建基准测试是否是个好主意。那时您不是对代码进行基准测试,而是对整个系统进行基准测试:文件系统、数据库驱动程序、可能的互操作内容等等在。

这不是 BenchmarkDotNet 的想法。它实际上是为对相对较小的 CPU 密集型任务进行基准测试而创建的,以查找瓶颈并根据测量结果执行优化。

但是,如果您仍想这样做,一个解决方案可能是在您创建的控制台应用程序的进程中运行基准测试,而无需生成特殊的基准测试程序集。

为此,请使用该[InProcess]属性。只需将其应用于您的基准类而不是通常的工作属性:

[InProcess]
public class TypeWithBenchmarks
{
    [Benchmark]
    public void BenchmarkedMethod()
    {
    }
}
于 2018-11-13T14:27:46.583 回答