java - 为什么最先启动的计时器最慢?
问题描述
让我先解释一下我在做什么,以便您可以更轻松地给我解决方案。
我在 localhost (MongoDB) 中有三个相同数据库的配置,我的 Java 应用程序与之交互,我应该以毫秒为单位计算 Java 应用程序对三个数据库执行的操作的性能,为此我使用 Google 的秒表。
问题是如果我按顺序计算操作的时间,首先启动的计时器总是最慢的。为什么?
这是代码:
public void Find_By_Name(int number) {
try {
Generator generator = new Generator();
Mongo mongo = new Mongo();
Mongo_Export mongo_export = new Mongo_Export();
Mongo_Export_2 mongo_export_2 = new Mongo_Export_2();
Mongo_Export_3 mongo_export_3 = new Mongo_Export_3();
generator.Generate_players(number);
mongo.Drop_database("FootballStats"); //Drop Database_1.
mongo.Drop_database("FootballStats_2"); //Drop Database_2.
mongo.Drop_database("FootballStats_3"); //Drop Database_3.
ArrayList<Player> all_players = generator.getAll_players();
ArrayList<Goalkeeper> all_goalkeepers = generator.getAll_goalkeepers();
Stopwatch time = null;
Stopwatch time_2 = null;
Stopwatch time_3 = null;
long ms = 0;
long ms_2 = 0;
long ms_3 = 0;
mongo_export.Insert_players(all_goalkeepers, all_players); // Insert documents in Database_1.
mongo_export_2.Insert_players(all_goalkeepers, all_players); // Insert documents in Database_2.
mongo_export_3.Insert_players(all_goalkeepers, all_players); // Insert documents in Database_3.
/** Start timer Database configuration 1 */
mongo_export.Find_by_name(all_goalkeepers, all_players); //Search in the Database_1
time.stop();
/**----------------------------------------------------------------------*/
/** Start timer Database configuration 2 */
time_2 = Stopwatch.createStarted();
mongo_export_2.Find_by_name(all_goalkeepers, all_players); //Search in the Database_2
time_2.stop();
/**----------------------------------------------------------------------*/
/** Start timer Database configuration 3 */
time_3 = Stopwatch.createStarted();
mongo_export_3.Find_by_name(all_goalkeepers, all_players); //Search in the Database_3
time_3.stop();
/**----------------------------------------------------------------------*/
ms = time.elapsed(TimeUnit.MILLISECONDS);
ms_2 = time_2.elapsed(TimeUnit.MILLISECONDS);
ms_3 = time_3.elapsed(TimeUnit.MILLISECONDS);
System.out.println("Timer for Database_1: " + ms + " ms.");
System.out.println("Timer for Database_2:: " + ms_2 + " ms.");
System.out.println("Timer for Database_3:: " + ms_3 + " ms.");
} catch (Exception e) {
System.out.println("Error in Find_By_Name().");
}
}
例如,如果我首先启动数据库 2 的计时器,这将是与数据库计时器 1 和 3 相比具有最高值的计时器。如果我首先启动数据库计时器 3,情况也是如此。
我还尝试不按顺序评估,而是对每个数据库一次执行一次函数,这样所有数据库都处于相同的条件和相同的延迟增量,但是通过在 3 个数据库中这样做,它们不是插入相同的文档,因为它们是在每次执行任何函数时随机生成的,因此文档具有不同的大小。我希望所有数据库都具有相同的文档以及相同数量的文档。
我不想消除“延迟”,但我希望对所有数据库进行平等评估。有什么解决办法吗?
解决方案
推荐阅读
- ethereum - 是否可以在以太坊的单个区块中更新两个不同交易中的相同密钥?
- python - Python,codecs.open() 给出 [Errno 2] “没有这样的文件或目录”作为输出,即使文件存在
- reactjs - React - 材质 UI - BottomNavigationAction - 活动子路线
- java - javafx 用户界面应用程序无法访问 ArrayList 中的所有值
- vue.js - 我正在使用'sortablejs'库是否可以选择动态元素,其值在点击事件时发生变化
- kubernetes - Kubernetes - 授予对匹配前缀或正则表达式的所有命名空间的完全访问权限
- java - 在 Android 中使用外部非 Android Java 库:找不到 .so 文件等
- html - 如何在 HTML 正文中设置固定位置并冻结我的面包屑?
- sql - SELECT INTO,其中源数据位于目标表以外的其他数据库中
- python - python 获取数组中的excel工作表名称,并将其置于条件中