2013-10-31 46 views
0

我最近不得不記錄由於某種原因寫入文件所需的時間。我在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,遠程機器上配置了操作系統和數據的獨立驅動器(不知道是什麼類型)
+0

PC中的逗號是否輸出小數點分隔符,表示寫入操作通常需要1秒鐘,但最多需要5秒鐘?這種產出似乎不太可能。 BTW 15.4914是定時器分辨率(每個TotalMilliseconds將是該值的倍數)。 –

+0

要添加到Eric的評論我建議使用System.Diagnostics.Stopwatch而不是日期時間。它更準確。 http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx – MikeWo

+0

是PC輸出中的逗號是小數點分隔符(OS語言環境是德語),數字是毫秒。由於文件創建,第一個值(5毫秒)更高。 1-2毫秒的寫作似乎不太可能?或者只是幾秒鐘?感謝您使用Stopwatch的建議,不知道這一點。 – phlow

回答

0

你是什麼驅動器測試這個呢? OS驅動器/臨時驅動器/連接驅動器...重要。正如你所提到的,緩存設置也很重要,最好從連接的驅動器開始並且不要緩存。

驅動器的ALU格式大小很重要。例如,如果你將文件分成64kb的塊並且有64kb的讀/寫速度更快。

存儲帳戶上的Azure驅動器有20分鐘的預熱階段,它們可以「慢」單位化或20分鐘不使用。

+0

PC驅動器是一個SSD,其中的操作系統,程序和數據都在該驅動器上。在Azure上,有一個用於操作系統和程序的持久分區和一個數據分區,在每次重啓時都會被刷新(我認爲)。我將該文件寫入用戶的AppData文件夾,該文件夾位於與OS相同的分區中。使用ALU格式大小意味着羣集大小?在我的電腦和Azure虛擬機上,每集羣也有4096字節。關於預熱階段:Azure上的文件寫入持續時間爲0毫秒,而我的PC爲1-2毫秒,所以這不是問題。我想知道0毫秒。 – phlow

+0

這是一個鏈接,說寫入文本後調用Flush,否則它將在磁盤緩存(內存)中:http://blogs.msdn.com/b/windowsazure/archive/2012/06/28/data -series-exploring-windows-azure-drives-disks-and-images.aspx這可能不是問題,因爲你的代碼使用了File類,我認爲它會自動刷新......你可能想試着重複你的測試大文件覆蓋磁盤緩存並查看您獲得的數字。 –

相關問題