gpt4 book ai didi

java - 如何测量每个输入文件的 Xtend 翻译时间

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:54 24 4
gpt4 key购买 nike

我正在 XTend 中构建一个 DSL 应用程序,我需要测量翻译我在其中运行的每个文档所花费的时间。

我使用 DSL 功能将一种数据格式 (IFC) 转换为另一种 (TTL)。

我尝试在生成器 (myDslGenerator.xtend) 的 doGenerate 方法中使用 System.currentTimeMillis() 来测量它,但据我所知,这仅测量写入输出文件所花费的时间,而不是解析输入文件所需的时间。

我不需要加载 Eclipse 应用程序所需的时间,只需要翻译每个文件所花费的实际时间(不是 cpu 时间)。

对于需要数秒(最多 20 秒)的任务,我当前(错误的)方法给出的结果在 0 到 500 毫秒之间。

doGenerate 是从 Eclipse 依赖项中的 ParallelBuilderParticipant 类(handleChangedContents 方法)调用的,但我无法进一步回溯它以找到调用它的位置。但也许这个方法实际上也包装了解析 (Resource resource = contect.resource)?

任何见解都会很棒 - 谢谢😊

编辑:尝试在此处提供更多信息 - 希望有用。

Functional Eclipse code

测量 doGenerate 方法的运行时间确实给了我编写“.ttl”文件所需的时间,但读取“.ifc”文件所花费的时间不在其中,因为它在doGenerate 方法被调用。 doGenerate 方法是 XTend 模板的一部分,来自 AbstractGenerator。

在项目中进行用法搜索,我可以看到 doGenerate 方法是从一个名为 ParallelBuilderParticipant 的类中调用的。

Dependency: ParallelBuilderParticipant.handeChangedContents

如果我改为测量此类的时间,我是否会找到解析一个文件并编写另一个文件所需的全部时间?如果是这样,我该怎么做,因为这是一个依赖 .class 文件 - Eclipse 不允许我编辑它。

最佳答案

我找到了一个足以满足我需要的解决方案,而且由于我花了很多时间在网上寻找解决方案,而且自己制作一个解决方案的时间几乎一样长,所以我想我会分享它。

我可能不清楚我使用的是带有 Eclipse Oxygen 的预构建版本的 Xtend。为了测量解析文件和写入结果所需的时间,我连接到 antlr 包 (org.xtext.ifcbrickconvert.parser.antlr.internal) 中的词法分析器 (InternalIfcBrickLexer.java)。在构造函数 InternalIfcBrickLexer(CharStream input) 中,我将 System.currentTimeMillis() 打印到控制台。在许多情况下,词法分析器作为第一个进程运行,包括在您保存时。

在生成器 (IfcBrickGenerator.xtend) 中,我覆盖了接口(interface)方法 void afterGenerate(Resource input, ...) 并再次打印 System.currentTimeMillis。

为了避免计算,我在词法分析器中创建了一个静态变量,并在 afterGenerate 方法中从当前时间中减去该变量,因此,我现在可以在几毫秒内完成词法分析、解析、翻译和写入新文件.

可能有一点不准确,因为我不知道是否可以在词法分析器之前调用某些东西,但从我最初的测试来看它似乎相当准确,而且因为我处理的文件需要 20 - 2000 秒到完成,几百毫秒并不是特别重要。

此方法的一个后备方案是它只需要在一个文件上运行 - 一旦您保存文件并开始处理,您不能更改任何文件 - 即使不保存 - 否则您将无法获得正确的结果。然而,这是我所期望/想要的,所以这对我来说不是问题。

感谢您的投入 - 我希望有人觉得这很有用 :)

关于java - 如何测量每个输入文件的 Xtend 翻译时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50329190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com