Tika在我的Java应用程序中比在TikaJAXRS中慢

时间:2015-01-23 03:50:50

标签: java performance apache-tika

我正在尝试从需要从大量文件中提取文本的C#项目中使用Tika。

我从一个简单的概念证明开始,该概念使用了TikaJAXRS,读取文件的内容,并将文件内容的HTTP PUT请求发送到http://localhost:9998/tika的TikaJAXRS服务器。这种方法运行得相当不错,但令我印象深刻的是,通过HTTP传输内容的开销必然会降低速度。

因此,我决定编写一个Java实现,以了解从等式中删除HTTP后性能的比较。我发现的是出乎意料的。它执行更慢,大约需要两倍的时间来解析65个不同类型的文件,共计16MB。 TikaJAXRS HTTP场景为1200毫秒,Java应用程序为2400毫秒。

我使用的TikaJAXRS服务器和Tika库都是1.7版本。我的Java代码清单如下。我错过了什么,为什么我的Java应用程序这么慢?

import org.apache.log4j.varia.NullAppender;
import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;

import java.io.File;
import java.io.IOException;
import java.util.Collection;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.lang3.time.StopWatch;

public class TikaTest {

    public static void main(String[] args) {

        // I'm not interested in what log4j has to say...
        org.apache.log4j.BasicConfigurator.configure(new NullAppender());

        File folder = new File("C:\\LMDevelopment");

        StopWatch timer = new StopWatch();
        timer.start();

        Collection<File> files = FileUtils.listFiles(folder, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
        Tika tikaClient = new Tika();
        try {
            tikaClient.parseToString(files.iterator().next());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TikaException e) {
            e.printStackTrace();
        }

        System.out.println("Time to warm up: " + timer.getTime() + "ms");

        timer.reset();
        timer.start();
        for (File f : files)
        {
            try {
                tikaClient.parseToString(f);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TikaException e) {
                e.printStackTrace();
            }
        }

        timer.stop();
        System.out.println("Time to parse all files: " + timer.getTime() + "ms");
    }
}

0 个答案:

没有答案