我设置了一个包含 4000 行和 10 列(每列包含 10 个字符)的表,并使用以下方法进行了简单的性能测试(是一个测量 和 之间实时时间的类):RealTimeCounterstart()stop()
List<String> myResult = new ArrayList<>();
ResultSet rs = s.executeQuery("SELECT * FROM Performance");
RealTimeCounter rtc = new RealTimeCounter();
rtc.start();
while(rs.next()) {
myResult.add(rs.getString(1));
}
rtc.stop();
System.out.println(rtc);
结果:
- 默认抓取大小:执行时间约为 20 秒
- 提取大小 = 100:执行时间约为 2.2 秒
- 提取大小 = 500:执行时间约为 450 毫秒
- 读取大小 = 2000:执行时间约为 120 毫秒
- 提取大小 = 4000:执行时间约为 50 毫秒
- 提取大小 = 4001:执行时间约为 10 毫秒 (!!)
因此,读取大小确实对执行速度有重大影响。
另一方面,读取大小对内存消耗有一定影响。有趣的是,使用上述代码之前和之后的快速分析表明,影响比我预期的要小得多。我得到的数字是:Runtime.getRuntime().freeMemory();
- 默认抓取大小:665k
- 提取大小 = 100: 665k
- 提取大小 = 500: 665k
- 提取大小 = 2000: 743k
- 提取大小 = 4000: 821k
- 提取大小 = 4001: 861k