由于某种原因,我最近不得不记录写入文件所需的时间。我在 Azure VM 上的 Windows Server 2012 上执行此操作。当我查看日志时,大部分时间都是 0 ms,只有极少数是 15.something ms。我以为我在测量时做错了,并用这段代码进行了测试:
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);
}
}
}
在我的 PC 上输出(操作系统区域设置为德语,因此逗号是小数点,而不是千位分隔符,使第一个数字为 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 上的一些写入缓存吗?
附加信息:
- 我的 PC 有一个 SSD,远程机器在不同的驱动器上配置了操作系统和数据(不确定是什么类型)