我正在尝试测试旋转不同图像分辨率需要多长时间。每个基准将旋转给定的Bitmap
,因此正在编辑它。我想在每个基准之前重置这个位图,所以我查看了[IterationSetup]
属性。然而,医生们表示,这不应该用于微珠。由于旋转位图的时间不到100毫秒,因此是一个微基准标记,我想知道如果我不能使用[IterationSetup]
,我该如何设置这样的问题?
我这样做的方法是编写一个单元测试,使用秒表测量性能,并将结果写入控制台。使用R#或其他插件,您可以在visualstudio中轻松地运行这样的单元测试。
然后,你可以在学习了你想学习的内容后删除测试,添加一个属性以忽略测试并添加一些合适的注释,或者设置一些系统来监控时间。
这样做的主要优点是工作量小,至少在您已经有单元测试项目的情况下是这样。对于我所做的性能测试类型,这通常是足够的,我通常更关心的是数量级,而不是任何微小的差异。
Benchmark.Net应该会给出更好的数字,但需要更多的精力来设置,除非你已经有了这样的项目。我对Benchmar.Net没有什么经验,但阅读文档时,GlobalSetup
似乎比IterationSetup
:更合适
由[GlobalSetup]属性标记的方法在初始化基准参数之后和所有基准方法调用之前,每个基准方法只执行一次。在所有基准测试方法调用之后,由[GlobalCleanup]属性标记的方法对于每个基准测试方法将只执行一次。如果您正在使用一些非托管资源(例如,在GlobalSetup方法中创建的资源(,则可以在GlobalCleanup方法中释放这些资源。
即为您的图像大小设置一个参数,并在GlobalSetup中创建位图。这是在假设您的rotate方法会写入一个新的位图,并保持原始位图不变的情况下进行的。至少这是我编写旋转方法的方式。否则,您可以多次旋转同一位图,性能不应受到像素中实际数据的影响。