gpt4 book ai didi

java - 提高 Java 程序的性能

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

我制作了一个 Applet 搜索实用程序,我在其中提供一个字符串作为输入并在指定的文件或文件夹中找到该字符串。
我已经完成了这个,但我对其性能不满意。
该过程响应时间过长。
我决定对其进行分析以查看发生了什么,我注意到方法 scanner.hasNextLine() 占用了大部分时间。
虽然这对我的程序来说是非常重要的方法,因为我必须读取所有行并找到该字符串,但有没有其他方法可以提高它的性能并减少执行时间

这是我使用此方法的代码....

fw = new FileWriter("filePath", true);
bw = new BufferedWriter(fw);

for (File file : filenames) {
if(file.isHidden())
continue;

if (!file.isDirectory()) {
Scanner scanner = new Scanner(file);
int cnt = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if(!exactMatch)
{
if(!caseSensitive)
{
if (line.toLowerCase().contains(searchString.toLowerCase())) {
// System.out.println(line);
cnt += StringUtils.countMatches(line.toLowerCase(),
searchString.toLowerCase());
}
}
else
{
if (line.contains(searchString)) {
// System.out.println(line);
cnt += StringUtils.countMatches(line,
searchString);
}
}
}

是的,toLowerCase() 方法也花费了比预期更多的时间。


我已经更改了我的代码,现在我正在使用 BufferedReader 代替 Scanner 作为 AlexNrj建议,我发现我的应用程序的性能有了很大的改进。
它现在的处理速度是其早期版本的三分之一。
感谢所有回复.....

最佳答案

根据您的问题,我检查了 Scanner 的代码,我认为您是对的。它没有针对大数据进行优化。我建议您使用简单的 BufferedReader 包装 InputStreamReader 包装 FileInputStream:

BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)))

然后逐行阅读:

r.readLine()

如果这对您来说还不够,请尝试读取大量行然后处理它们。

关于toLowerCase(),您可以尝试使用正则表达式。好处是您不必每次都更改行的大小写。缺点是在简单的情况下,正则表达式比常规字符串比较慢一点。

关于java - 提高 Java 程序的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9324224/

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