【发布时间】:2016-01-23 22:03:58
【问题描述】:
我有一个使用Stanford's CoreNLP 包的Java NLP 项目。我有几个项目的单元测试,我喜欢经常运行它们,以了解细微的调整如何影响系统的输出。不幸的是,CoreNLP 包需要加载a model of the English language 才能执行其分类和标记,而且这个文件太大,需要几秒钟才能加载到内存中。这似乎没有太多的等待时间,但单元测试本身需要几毫秒才能运行,而且每次我开始新的测试运行时,我都必须等待模型文件加载,这似乎是一种耻辱。
有没有办法让模型文件加载一次,然后针对已经在内存中的模型运行后续单元测试?也许类似于存储模型并可以从单元测试中调用的测试“服务器”?我以前从未处理过这样的事情,所以我真的不知道从哪里开始。
【问题讨论】:
-
在静态方法before your suite中加载一次模型。
-
我确实以静态方法加载了一次模型。抱歉,如果我不清楚:我想在每次计算机启动时加载一次模型。本质上,只有第一个套件运行会很慢,所有其他套件运行应该很快。那有意义吗?我不知道如何最好地表达它。
-
要在运行之间重用数据,您需要将其加载到可以在共享内存中使用的表单中。例如内存映射文件。不确定是否值得。如果它为您的整个单元测试运行增加了几秒钟,则可能无法更改。
-
首先要做的是检查基础知识:用于加载文件的代码是什么?你有 SSD 吗?
-
我实际上已经使用 Java RMI 编写了一个可行的解决方案。服务器加载文件并坐在那里等待来自单元测试的调用。不过不确定这是否理想。
标签: java performance unit-testing junit