

Windows10 、VisualStudio2019、C#、.NET Framework4.8 でソフトを作成しています。

とある処理で、データを内部のバッファ（C#のQueueクラスを利用）している時に、どこで処理が遅いのかを調査している際、メソッド実行の初回のみ若干処理が遅れる傾向があると感じ、調査した所、仕様のように感じています。

具体的な調査としては、以下のコードイメージで、メソッドの前後をストップウォッチで計測した所、初回のみ数100usecで、以降は数usecという結果でした。今回利用したキュークラスの確保や初期化は、ボタンクリックの処理でなく、フォームのコンストラクタで行っているため、初回のみ配列確保に時間がかかっているというわけでもないと思っています。

C#やVBは、実際には実行ファイルでなく、あくまで中間言語ファイルが生成される為、初回のみ関数をメモリに展開したりバイナリに翻訳するような処理があるため遅くなるのかなど想像し、MSのリファレンスを探しているのですが、良い対策を見つけられず、もし詳しい方おられましたら、ご助言頂ければ幸いです。

### 再現用コードイメージ（Formアプリケーションをベースにボタンとテキストボックスを追加）

[code]

    // グローバル変数宣言
    private Queue<float> queue;   // データ格納用キュー（FIFOバッファとして利用）
        
    // フォームのコンストラクタ
    public Form1()
    {
      InitializeComponent();
      /利用クラスの初期化
      queue = new Queue<float>(100);
    }
    
    //フォーム上のボタンクリック
    private void button8_Click(object sender, EventArgs e)
    {
      //ストップウォッチ宣言・初期化
      Stopwatch sw = new Stopwatch();
      sw.Start(); //測定開始
      queue.Enqueue(1); //キューにデータを追加するメソッドを実行
      sw.Stop(); //測定終了
      TimeSpan timeSpan = sw.Elapsed;
      textBox1.Text += "[Elapsed : Method" + cnt.ToString("D3") + " times]" + (timeSpan.TotalMilliseconds * 1000).ToString() + "[usec]\r\n";
       cnt++;
    }
    
[/code]

### 実行結果（一度目だけ時間がかかっている）

[code]

    [Elapsed:Enque000 time]263.8[usec]
    [Elapsed:Enque001 time]0.8[usec]
    [Elapsed:Enque002 time]0.6[usec]
    [Elapsed:Enque003 time]1[usec]
    [Elapsed:Enque004 time]0.6[usec]
    [Elapsed:Enque005 time]0.6[usec]
    [Elapsed:Enque006 time]0.8[usec]
    [Elapsed:Enque007 time]0.5[usec]
    [Elapsed:Enque008 time]0.5[usec]
    [Elapsed:Enque009 time]0.7[usec]
    [Elapsed:Enque010 time]0.6[usec]
    
[/code]


CC BY-SA 4.0
2023-07-20T12:00:06.687
95710
2023-07-20T17:59:24.603
2023-07-20T17:59:24.603
2238
57915
question
c# windows visual-studio .net
C#においてメソッドを初めて実行する時は若干処理が遅いと思っていますが、これは仕様でしょうか？また、対策はあるでしょうか？


はい、.NET Frameworkはそういうものです。原因はご推察の通りです。

Native へのコンパイルという手段が用意されています。  
<https://learn.microsoft.com/en-us/previous-
versions/dotnet/netframework-1.1/ht8ecch6(v=vs.71)?redirectedfrom=MSDN>


CC BY-SA 4.0
2023-07-20T12:05:36.117
95711
2023-07-20T12:05:36.117
2238
95710
answer