我目前正在尝试对一种算法进行基准测试,该算法从数据库中提取数据并对其执行操作,该函数的时间比我想要的要长一点,我希望对其进行基准测试以便监测任何性能提高(并向客户端演示)。我的问题是,唯一"有文档记录"的基准测试库是scalameter,它并没有真正深入研究如何使用它。我非常困惑于如何为一个名为"User"的自定义类生成生成器,该类生成随机用户作为输入。其次,我不太确定基准测试是如何使用标量计的,他们使用的参数类型到底是什么,以及你如何使用它
我看的方向对吗?
-
在基准测试中避免使用随机数据,因为这可能会导致性能差异。如果必须使用随机数据,请确保使用种子值。
-
您很少需要创建自定义生成器类。在几乎所有的用法中,您都会在生成器上使用for composition来为基准创建自定义数据值。请参阅下面的文档链接。
-
ScalaMeter中的生成器与ScalaCheck中的生成器不同。它们不仅仅生成一些随机值。它们生成了一组定义良好的值,这些值被提供给基准。通常,这些值遵循特定的模式,例如数据的大小。例如,如果您正在对
List
操作进行基准测试,生成器通常会生成不同大小的列表。 -
你没有说如何创建
User
,只是说你是随机创建的。
因此,让我们假设有一个函数newUser
接受一个整数,并使用它来创建一个User
:
def newUser(seed: Int): User
如果User
对象的大小有任何概念,则可以使用种子来影响该大小。例如,如果User
对象具有name
字段,则可以生成大小为seed
的名称字段。如果大小影响操作的运行时间,这将特别有用,因为您稍后将看到对绘图的依赖性。
User
对象的生成器的类型为Gen[User]
。我们从一个种子生成器开始创建它:
val seeds = Gen.range("seed")(0, 10, 1)
此生成器包含从0
到10
的种子整数。我们使用它们来创建一个用户生成器:
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
中进行了总结,但您并不真正需要它们——相反,使用生成器理解,如教程所示,