为什么最先启动的计时器最慢?

g6ll5ycj  于 2021-07-04  发布在  Java
关注(0)|答案(0)|浏览(132)

让我先解释一下我在做什么,这样你就可以更容易地给我解答了。
在localhost(mongodb)中,我的java应用程序与同一个数据库交互,我有三种配置,我应该计算java应用程序对这三种数据库执行的操作的性能(以毫秒为单位),为此,我使用google的stopwatch。
问题是,如果我按顺序计算操作的计时,那么最先启动的计时器总是最慢的。为什么?
代码如下:

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().");

        }

    }

例如,如果我首先启动 db2 的计时器,那么这将是与数据库计时器1和3相比具有最高值的计时器。如果我先启动数据库定时器3也是一样的。
我也试着不按顺序求值,而是对每个数据库一次执行一次函数,这样所有的数据库都处于相同的条件,具有相同的延迟增量,但是在3个数据库中这样做,它们不会插入相同的文档,因为它们是在每次执行任何函数时随机生成的,因此文件大小不同。我希望所有的数据库有相同的文件,以及相同数量的文件。
我不想消除“延迟”,但我希望所有的数据库都能得到同等的评估。有什么解决办法吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题