使用する.NET環境の時間テスト


はい.NET環境では,プログラム実行中のスレッドや不要なユニット収集がいつでも起こる可能性のある事実を考慮する必要がある.だから時間テストを書いています
コードの場合、これらの状況を考慮する必要があります.
まず、不要なユニット収集をどのように処理するかを見てみましょう.まず,不要なユニット収集の用途について議論する.C#言語はスタックと呼ばれるメモリでパラメータに与えられることがあります
文字列、配列、クラス事例オブジェクトなどのタイプを考慮して、ストレージスペースを割り当てます.スタックは、データ・アイテム(前述のタイプ)を保存するためのメモリ領域です.
通常の変数のような値タイプはスタックに格納されます.参照された参照データもスタックに格納されますが、実際のデータは参照タイプです.
形式はスタックに格納されます.
変数を宣言するサブルーチンが完全に実行されると、スタックに格納されている変数を解放できます.一方、スタックに格納された変数は
不要なユニット収集プロセスを呼び出すまで保持します.これらの数は、スタックデータを参照する動作がない場合にのみ、不要なユニット収集によって除去できます.
根拠.
プログラム実行中に不要なユニット収集がいつでも発生する可能性があります.ただし、時間テストコードの実装時に不要なリストが実行されないことを確認する必要があります.
メタコレクタ.しかし、無用のユニット収集器を強制的に呼び出すことで、専用の無用のユニット収集を行うという話を聞いたことがあるかもしれません.NET環境は実行不要単
メタコレクション呼び出しは、GCという特別なオブジェクトを提供します.システムが不要なユニット収集を実行するために、以下のように簡単に書くことができます.
GC.Collect();
しかし、すべてがそうしなければならないのではないでしょうか.スタックに格納されている各オブジェクトにはfinalizerと呼ばれる専門的な方法があります.finalizerメソッドは削除されています
オブジェクトを除く前の最後のステップ.finalizerメソッドに関する問題は,これらのメソッドがシステム方式で実行されていないことである.実際には
オブジェクトのfinalizerメソッドが本当に実行されたかどうかを確認しますが、オブジェクトを削除する前にこのオブジェクトのfinalizerメソッドを実行する必要があることを知っています.確かに
この点を信じて、スタック上のオブジェクトを待つすべてのfinalizerメソッドが実行された後に続行することをプログラムに伝えるコードを追加しました.このコード行は次のとおりです.
GC.WaitForPendingFinalizers( );
障害はクリアされ、正しいスレッドを使用するという問題が残ります.はい.NET環境では、アプリケーションプログラムと呼ばれる
シーケンスドメインのプロセス.これにより、オペレーティングシステムは、異なるプログラムを同じ時間に別々に実行できます.プロセス内で、プログラムまたはプログラムの一部はオンラインです.
コース内で運行されています.オペレーティングシステムは、スレッドによってプログラムの実行時間を割り当てます.プログラムコードを時間でテストする場合は、時間テストを行っていると確信する必要があります.
コードは、オペレーティングシステムが実行する他のタスクではなく、独自のプログラムに割り当てられたプロセスにあります.
はい.NETフレームワークではプロセスクラスを用いることでこれを行うことができる.Processクラスが所有するメソッドでは、現在のプロセスの選択、プログラムの実行を許可します.
スレッド内のスレッドと、スレッドの実行開始時間を格納するタイマを選択します.これらのメソッドのそれぞれは、呼び出しにマージできます.この呼び出しは
その戻り値は、開始時間(TimeSpanオブジェクト)を格納する変数に割り当てられます.次のコードに示すように(間違いなく、2行のコードです):
TimeSpan startingTime;
startingTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;
残りは、時間テストを行うコードセグメントが停止したときに時間をキャプチャすることです.方法は次のとおりです.
duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startingTime);
これらをすべて1つのプログラムに統合します.このプログラムのコードは、以前のテストコードと同じです.
using System;
using System.Diagnostics;
class chapter1
{
static void Main()
{
int[] nums = new int[100000];
BuildArray(nums);
TimeSpan duration;
DisplayNums(nums);
DisplayNums(nums);
DisplayNums(nums);
duration = Process.GetCurrentProcess().TotalProcessorTime;
Console.WriteLine("Time: " + duration.TotalSeconds);
}
static void BuildArray(int[] arr)
{
for (int i = 0; i <= 99999; i++) 
arr[i] = i;
}
static void DisplayNums(int[] arr)
{
for (int i = 0; i <= arr.GetUpperBound(0); i++)
Console.Write(arr[i] + " ");
}
} 

新しい改良された時間テストコードを採用した後、プログラムの戻り値は0.2526であった.この値を以前の第1版の時間テストコードと5秒近く返します.
の双曲線コサインを返します.この2つの時間試験方法の間に有意な差があることは明らかである.したがって.NET環境における時間テストコードは使用すべきである.NET
やり方でやる.