如何实现标量计的生成器



我目前正在尝试对一种算法进行基准测试,该算法从数据库中提取数据并对其执行操作,该函数的时间比我想要的要长一点,我希望对其进行基准测试以便监测任何性能提高(并向客户端演示)。我的问题是,唯一"有文档记录"的基准测试库是scalameter,它并没有真正深入研究如何使用它。我非常困惑于如何为一个名为"User"的自定义类生成生成器,该类生成随机用户作为输入。其次,我不太确定基准测试是如何使用标量计的,他们使用的参数类型到底是什么,以及你如何使用它

我看的方向对吗?

  1. 在基准测试中避免使用随机数据,因为这可能会导致性能差异。如果必须使用随机数据,请确保使用种子值。

  2. 您很少需要创建自定义生成器类。在几乎所有的用法中,您都会在生成器上使用for composition来为基准创建自定义数据值。请参阅下面的文档链接。

  3. ScalaMeter中的生成器与ScalaCheck中的生成器不同。它们不仅仅生成一些随机值。它们生成了一组定义良好的值,这些值被提供给基准。通常,这些值遵循特定的模式,例如数据的大小。例如,如果您正在对List操作进行基准测试,生成器通常会生成不同大小的列表。

  4. 你没有说如何创建User,只是说你是随机创建的。

因此,让我们假设有一个函数newUser接受一个整数,并使用它来创建一个User:

def newUser(seed: Int): User

如果User对象的大小有任何概念,则可以使用种子来影响该大小。例如,如果User对象具有name字段,则可以生成大小为seed的名称字段。如果大小影响操作的运行时间,这将特别有用,因为您稍后将看到对绘图的依赖性。

User对象的生成器的类型为Gen[User]。我们从一个种子生成器开始创建它:

val seeds = Gen.range("seed")(0, 10, 1)

此生成器包含从010的种子整数。我们使用它们来创建一个用户生成器:

val users: Gen[User] = for (seed <- seeds) yield newUser(seed)

文件中对此进行了讨论:

http://scalameter.github.io/home/gettingstarted/0.7/

发电机部分:

http://scalameter.github.io/home/gettingstarted/0.7/generators/index.html

参数在ScalaDoc中进行了总结,但您并不真正需要它们——相反,使用生成器理解,如教程所示,

相关内容

  • 没有找到相关文章

最新更新