问题是: 给定许多具有相似或相等范围的编程库(例如 XML 解析器、正则表达式、标记...);是否有工具可以在这些库上运行性能测试并进行比较(并生成报告),即使这些库可能是用不同的编程语言(如 java、C#、ruby、python、perl 等)编写的?
我查看了这些opensourcetesting.org/performance.php,但没有一个符合上述(有些模糊的)要求。
是否有用于跨语言跨平台性能测试的工具包或框架?
谢谢。
问题是: 给定许多具有相似或相等范围的编程库(例如 XML 解析器、正则表达式、标记...);是否有工具可以在这些库上运行性能测试并进行比较(并生成报告),即使这些库可能是用不同的编程语言(如 java、C#、ruby、python、perl 等)编写的?
我查看了这些opensourcetesting.org/performance.php,但没有一个符合上述(有些模糊的)要求。
是否有用于跨语言跨平台性能测试的工具包或框架?
谢谢。
我不会尝试将单个工具包用于多种语言。这不太可能为每个应用程序带来最佳(甚至是平均)性能。
相反,我会尝试提出一个框架设计,它定义了要测试的内容,并拥有一个通用数据集。然后每种语言/库都可以提供自己的框架实现来测试适合该库的操作。这样,即使它们不使用完全相同的语法/调用,这些操作也可以“在逻辑上等效”。您最终会测试该库/语言的惯用代码,而不仅仅是最低公分母。
这是我对 Protocol Buffers 进行基准测试所采用的方法。到目前为止,我非常基本的框架已经在 C# 和 Java 中实现,我现在正在编写一个更丰富的框架,它允许运行整个“基准脚本”。一个理想的目标是同一平台内的不同实现(例如,协议缓冲区的不同 .NET 实现)应该能够轻松连接到相同的核心基准测试代码中。
在我看来,重要的是拥有一组通用的操作(即使它们并非全部由所有库实现)和一个通用的数据集。这是基准测试有意义的唯一方式。
如果可能的话,最好使用某种形式的依赖注入,这样您就可以插入一个模块并与另一个模块进行切换。在此之前,您需要为此类库创建独特的界面(即包装器),这使工作更难,但整体设计更好。从积极的方面来说,如果您想对早期的界面进行基准测试,则不必完整,而只是为了展示您认为在 perf 时最有益的内容。是有问题的。
能力很大程度上取决于所使用的语言。
我不喜欢人工测试。它们在大多数情况下是不准确的 IMO,人们往往会忽略一个库函数或多或少地比其他库函数执行的操作,而它们看起来像同一件事。我很少遇到没有这种属性的基准。
另一方面,很少有完全更好的图书馆这样的东西。许多库在其他类似库可能很糟糕的某些情况下表现出良好的性能,反之亦然。
因此,如果性能对您的应用程序来说是最重要的事情,那么 IMO 最好的做法是为您要导入的操作创建接口,然后插入/输出几个库并查看实际基准测试中的差异,您的基准测试应用程序在运行,而不是一些人工数学笨蛋...