【问题标题】:Is there a way to determine the time taken from power on to Windows starting有没有办法确定从开机到 Windows 启动所用的时间
【发布时间】:2011-05-05 20:35:23
【问题描述】:

我想知道从开机到 Windows 启动需要多长时间。 有没有办法追溯确定(即一旦窗口启动)? BIOS/CMOS 是否保持上次启动时间? 是否可以从 RDTSC 中得知机器运行了多长时间并减去 Windows 启动时间?

【问题讨论】:

    标签: boot bios


    【解决方案1】:

    从 GetTickCount() 获取开机后的时间。然后获取 Windows 在启动时接触的文件的时间戳(例如 windows\bootstat.dat)。代码如下。在我的机器上它说 16 秒,这听起来很准确。

    #include <stdio.h>
    #include <windows.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <time.h>
    
    int main()
    {
        struct __stat64 st;
        _stat64("c:\\windows\\bootstat.dat", &st);
    
        return printf("%d\n", st.st_mtime - (time(NULL) - GetTickCount()/1000));
    }
    

    【讨论】:

    • GetTickCount 是否测量从开机或从 Windows 启动开始的时间? MSDN 从系统启动时就说的有点模糊......
    • 刚刚尝试暂停引导加载程序,它仍然打印“16”。因此 GetTickCount 似乎报告了自 Windows 启动以来的时间。但是这个想法的一个变体可能会起作用:记录关机时间,然后是启动时间(它只在用户重新启动时才有效,而不是关机)。
    • 我正在考虑使用 RDTSC 而不是 GetTickCount,我认为它应该在打开后给出时间。我只需要找出将数字转换为秒的最简单方法。 bootstat.dat 的想法是获取 Windows 启动时间的一种非常简单的方法
    【解决方案2】:

    您可以尝试BootTimer 或BootRacer 看看它们中的任何一个都能满足您的需求。

    我不相信您可以在 Windows 启动后确定这一点。我不知道任何存储上次启动时间的 BIOS。但在任何现代机器上,如果从开机到调用 OS 引导加载程序(本质上是运行 POST 例程所需的时间)之间的时间超过几秒钟,则说明有问题。

    您是否尝试以编程方式执行此操作以获得机器在线和可用的准确时间? POST 花费的几秒钟所导致的不准确性似乎不会产生重大影响。如果您要进行基准测试或优化,这两个实用程序中的任何一个都应该适合您。

    【讨论】:

    • 我们实际上有一个问题,有些机器需要几分钟才能通过 POST,所以我希望创建一种检测它们的方法,以便我们进行调查。所以时间不需要特别准确——只要能区分几秒钟和几分钟就可以了
    • 也许其他人会知道如何获得比较时间。我能做的最好的建议是关闭全面的 RAM 检查、优化 BIOS 搜索启动设备的顺序(尤其是关闭长时间搜索网络启动设备)、确保启用任何适用的“快速启动”选项以及禁用软盘驱动器寻道。我还看到硬盘驱动器的自动检测会减慢 POST - 检查任何电缆或连接并考虑在 CMOS 中存储驱动器参数(并将不存在的驱动器设置为无),而不是将其设置为自动。祝你好运!
    • 感谢您就可能导致速度下降的原因提出建议。很有帮助
    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多