我最近不得不记录由于某种原因写入文件所需的时间。我在Azure虚拟机上的Windows Server 2012上执行了此操作。当我查看日志时,大部分时间都是0毫秒,只有极少数是15秒。我觉得我做了一件错误的测量和测试了这段代码:Windows Server 2012 Azure VM上的文件写入时间
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([email protected]"\log.txt", Convert.ToString(ms) + System.Environment.NewLine);
}
}
}
输出我的电脑上(OS区域设置为德语,因此逗号是小数点符号,而不是一个千位分隔符,使得第一数目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
有时(OS区域设置为英语,所以点是十进制标记,使得相关的数15.5毫秒) :
0 0 0 0 0 0 15.4914 0 0 0
这是什么原因?这是一些在Windows Server 2012或Azure VM上的写缓存吗?
附加信息:
- 我的电脑是在单个SSD,远程机器上配置了操作系统和数据的独立驱动器(不知道是什么类型)
PC中的逗号是否输出小数点分隔符,表示写入操作通常需要1秒钟,但最多需要5秒钟?这种产出似乎不太可能。 BTW 15.4914是定时器分辨率(每个TotalMilliseconds将是该值的倍数)。 –
要添加到Eric的评论我建议使用System.Diagnostics.Stopwatch而不是日期时间。它更准确。 http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx – MikeWo
是PC输出中的逗号是小数点分隔符(OS语言环境是德语),数字是毫秒。由于文件创建,第一个值(5毫秒)更高。 1-2毫秒的写作似乎不太可能?或者只是几秒钟?感谢您使用Stopwatch的建议,不知道这一点。 – phlow