如何实现scalameter的生成器

时间:2014-09-26 06:34:41

标签: scala benchmarking slick scalameter

我目前正在尝试对从数据库中提取数据并对其执行操作的算法进行基准测试,该功能需要更长的时间,然后我会喜欢并且我想对其进行基准测试以便我可以监控任何性能提升(以及向客户展示)。我的问题是,唯一的'记录的'基准测试库是scalameter,它并没有深入探讨如何使用它。我很失落如何为一个名为“用户”的自定义类生成一个生成器。它生成随机用户作为输入。其次,我不太确定基准测试如何与scalameter一起使用,它们使用的参数类型究竟是什么以及如何使用它。

我是否正朝着正确的方向前进?

1 个答案:

答案 0 :(得分:0)

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

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

  3. ScalaMeter中的生成器与ScalaCheck中的生成器不同。它们不只是生成一些随机值。它们生成一组定义明确的值,并将其输入基准。通常,这些值遵循某种模式,例如数据的大小。例如,如果您正在对List操作进行基准测试,则生成器通常会生成不同大小的列表。

  4. 您不会说如何创建User,而只是说您是随机创建的。

  5. 因此,我们假设有一个函数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

    {p> ParametersScalaDoc中进行了总结,但您并不真正需要它们 - 相反,请使用生成器理解,如教程所示,