我最近不得不記錄由於某種原因寫入文件所需的時間。我在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