0

最近、何らかの理由でファイルの書き込みにかかる時間を記録する必要がありました。これは、Azure VM 上の Windows Server 2012 で行いました。ログを見ると、ほとんどの時間は 0 ミリ秒で、15 ミリ秒だったのはごくわずかでした。測定に何か問題があると思い、次のコードでテストしました。

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 での出力 (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 の書き込みキャッシュですか?

追加情報:

  • 私の PC には SSD が 1 つあり、リモート マシンは OS とデータが別々のドライブにあるように構成されています (種類がわからない)
4

1 に答える 1

0

これをテストしているドライブは何ですか?OS ドライブ/一時ドライブ/接続ドライブ...重要です。あなたが言及したように、キャッシュ設定も重要です。接続されたドライブとキャッシュなしで始めるのが最善です.

ドライブの ALU フォーマット サイズが重要です。たとえば、ファイルを 64kb ブロックに分割し、64kb の読み取り/書き込みを行うと、より高速になります。

ストレージ アカウントの Azure ドライブには 20 分間のウォームアップ フェーズがあり、初期化が "遅くなる" か、20 分間使用されない場合があります。

于 2013-10-31T00:43:36.367 に答える