我最近不得不记录由于某种原因写文件所花费的时间。我在Azure VM上的Windows Server 2012上执行了此操作。当我查看日志时,大多数时间都是0毫秒,只有极少数是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上的一些写缓存吗?
其他信息: