使用 Windows Server 2012 的 Azure VM 上的文件写入持续时间



由于某种原因,我最近不得不记录写入文件所需的时间。我在 Azure VM 上的 Windows Server 2012 上完成了此操作。当我查看日志时,大多数时间是 0 毫秒,只有极少数是 15.s 左右。我以为我在测量中做错了什么,并用这段代码进行了测试:

class Program
{
    static void Main(string[] args)
    {
        string dir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\TEST";
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }
        for (int i = 0; i < 10; i++)
        {
            DateTime start = DateTime.Now;
            File.WriteAllText(dir + @"test.txt", "test");
            DateTime end = DateTime.Now;
            TimeSpan duration = end - start;
            double ms = duration.TotalMilliseconds;
            File.AppendAllText(dir+@"log.txt", Convert.ToString(ms) + System.Environment.NewLine);
        }
    }
}

在我的电脑上输出(操作系统区域设置设置为德语,所以逗号是小数点,而不是千位分隔符,使第一个数字为 5 毫秒):

5,0037 1,001 0,9976 1,001 1,001 2,002 0,9956 2,002 1,0003 0,9996

远程计算机上的输出:

0 0 0 0 0 0 0 0 0 0

有时(操作系统区域设置设置为英语,因此点是小数点,使相关数字为 15.5 毫秒):

0 0 0 0 0 0 15.4914 0 0 0

这是什么原因呢?这是Windows Server 2012或Azure VM上的一些写缓存吗?

附加信息:

  • 我的电脑只有一个 SSD,远程计算机在单独的驱动器上配置了操作系统和数据(不确定是什么类型)

您在哪个驱动器上测试? 操作系统驱动器/临时驱动器/连接的驱动器...这很重要。正如您提到的,缓存设置也很重要,最好从连接的驱动器开始,没有缓存。

驱动器的 ALU 格式大小很重要。 例如,如果您将文件分块为 64kb 块,并且读取/写入速度为 64kb,则速度更快。

存储帐户上的 Azure 驱动器有 20 分钟的预热阶段,在该阶段中,它们可以"缓慢"单元化,或者在 20 分钟内不使用时。

最新更新