CodeBenchmark
ビジュアル同時試験成分は、同時に任意のコンポーネントまたはサービスロジックコードによって試験することができる高性能である視覚のようにして、テスト結果を表示するための最終的な成分、同時治療の特定のケースと遅延テストの結果を見ることができます配布。構成要素はまた、それらと異なる並行性の間の最適な表示性能差の最終結果は、圧力検出の実施例と異なるロジックコードパケットの同時の複数の同時に実行することができる単一のサービスまたは同時テストロジックだけでなくすることができます。次に、どのようにサービスロジックのコードまたは同時テストのこのコンポーネントを使用します。
テストプロジェクトをビルドします
vs
又はvscode
コンソールプロジェクトを作成した後、成分(参照、最新バージョンを参照BeetleX.CodeBenchmark
)
インストール・パッケージBeetleX.CodeBenchmark -Version 1.0を。8
圧力感知はHTTPを実装します
参照成分は、特定の試験によって調製することができる後、テスト要件の試験アセンブリの調製を満たす必要があり、テストコードを書くためのインターフェースを実装する必要がある次のように、インタフェースが記載されています。
パブリック インターフェースIExample:IDisposableを { ボイド初期(ベンチマークベンチマーク)。 タスク)は(実行します。 }
圧力検知ロジックHTTPコード
[System.ComponentModel.Category(" TCP " )] クラスHTTPGET:IExample { 公共 ボイド廃棄() { } 公共 非同期タスク実行() { VARの結果= 待つ_httpHandler.jsonを(); } 公共 ボイド初期化(ベンチマークベンチマーク) { 場合(_httpApi == NULL ) { _httpApi = 新しいBeetleX.Http.Clients.HttpClusterApi()。 _httpApi.DefaultNode.Add(" http://192.168.2.19:8080 " )。 _httpHandler = _httpApi.Create <IHTTPハンドラ> (); } } 静的BeetleX.Http.Clients.HttpClusterApi _httpApi。 静的IHTTPハンドラ_httpHandler。 【BeetleX.Http.Clients.FormUrlFormater] パブリック インターフェースIHTTPハンドラ { // のhttp://ホスト/ JSON タスク< ストリング > JSON(); } }
同時ときに初期化要求のインスタンスを作成しhttp
、要求オブジェクトはHttpClusterApi
、我々は唯一の静的を構築するために必要なスレッドセーフオブジェクトです。コンポーネントは、同時の最初のインスタンスのために構築されます。
圧力測定を開始します
試し書きした後にテストする必要がある場合、すなわち、テスト管理が簡単なコードで開くことができます
ベンチマーク=ベンチマーク新しい新しいベンチマーク(); benchmark.Register(typeof演算(プログラム).assembly); benchmark.Start(); // ローカル管理サービスを開き、サービスチャネルは、デフォルトのポート9090で のIF(== Environment.OSVersion.Platform PlatformID .Win32NT) benchmark.OpenWeb();
現在のシステムがいるかどうかを判断するためのコードのビットを行うwindows
(サービスが実現VUEに基づいているため、一部の古いブラウザの互換性の問題があり、我々は近代的なブラウザを使用することをお勧めします)、自動的にサービスにアクセスするためにブラウザを開きます。
管理とテスト
ブラウザからサービス後のオープンは、テストケースを管理することができる場合は、次のように、特定のインターフェイスは次のとおりです。
管理インターフェイスでは、唯一、次は10の同時10秒と実行テストケース開いているテストケースを選択して測定することができ、同時実行テスト圧力を追加する必要があります。
同時完了し、平均の数を確認するために実行した後RPS
、遅延分布を見ることができ、分布はその時点で処理領域のほとんどを知っている可能性があり、テストのユースケースをヒット。
異なる同時の比較
何度も異なる同時テストのサービスを必要とするので、サービスは同時量の下で、ほとんどの同時処理能力を観察することができ、同時テストグループをサポートするために、複数のコンポーネントを追加し、テストし、その結果を比較します。
このハードウェアおよびテストシナリオの下では、明らかに8同時までのテスト結果を動力計
テスト計画を通じて、同時実行制御サービス状況のために設計することができます。次に、同じテスト中の環境を変更しようとします
あなたはすぐにツールを使って別の同時処理環境下で最適な効果を測定することができるかもしれ
複数の論理同時性能比較することができます
圧力検出アセンブリの実施形態は、マルチコントラストをサポートする、唯一のテストのテストケースを複数選択する必要があります。次単に異なる試験json
シーケンスアセンブリの性能比較を。試験は、それぞれNewtonsoft.Json
、Utf8Json
、SwifterJson
およびspanJson
次のように対応するコードです。
-
Newtonsoft.Json
[System.ComponentModel.Category(" シリアライザストリーム" )] クラスNewtonsoft_Stream:CodeBenchmark.IExample { 公共 ボイド廃棄() { } パブリックタスク(実行) { memoryStream.Position = 0 。 VaRのユーザー= User.List(10 )。 jsonSerializer.Serialize(jsonTextWriter、ユーザー); jsonTextWriter.Flush(); 返すTask.CompletedTaskを。 } プライベートSystem.IO.MemoryStreamのMemoryStream。 プライベートSystem.IO.StreamWriterのStreamWriter; プライベートNewtonsoft.Json.JsonSerializer jsonSerializer。 プライベートNewtonsoft.Json.JsonTextWriter jsonTextWriter。 公共 ボイド初期(ベンチマークベンチマーク) { MemoryStreamを = 新しいSystem.IO.MemoryStream()。 jsonSerializer = 新しいNewtonsoft.Json.JsonSerializer(); StreamWriter = 新しいのStreamWriter(MemoryStreamを); jsonTextWriter = 新しいNewtonsoft.Json.JsonTextWriter(のStreamWriter)。 } }
-
Utf8Json
[System.ComponentModel.Category(" シリアライザストリーム" )] クラスUtf8Json_Stream:CodeBenchmark.IExample { 公共 ボイド廃棄() { } 公共 非同期タスク実行() { MemoryStream.Position = 0 。 VaRのユーザー= User.List(10 )。 待つ Utf8Json.JsonSerializer.SerializeAsync <リスト<ユーザ>> (MemoryStreamを、ユーザーが)。 TextWriter.Flush(); } プライベート System.IO.MemoryStreamのMemoryStream = 新しいですSystem.IO.MemoryStream(); プライベートたSystem.IO.TextWriterたTextWriter。 公共 ボイド初期(ベンチマークベンチマーク) { たTextWriter = 新しいSystem.IO.StreamWriter(MemoryStreamを、Encoding.UTF8)。 } }
-
SwifterJson
[System.ComponentModel.Category(" シリアライザストリーム" )] クラスSwifter_Stream:CodeBenchmark.IExample { 公共 ボイド廃棄() { } 公共 非同期タスク実行() { MemoryStream.Position = 0 。 VaRのユーザー= User.List(10 )。 待つ Swifter.Json.JsonFormatter.SerializeObjectAsync <リスト<ユーザ>> (ユーザ、たTextWriter)。 TextWriter.Flush(); } プライベート System.IO.MemoryStreamのMemoryStream =新しいSystem.IO.MemoryStream(); プライベートたSystem.IO.TextWriterたTextWriter。 公共 ボイド初期(ベンチマークベンチマーク) { たTextWriter = 新しいSystem.IO.StreamWriter(MemoryStreamを、Encoding.UTF8)。 } }
-
SpanJson
[System.ComponentModel.Category(" シリアライザストリーム" )] クラスSpan_Stream:CodeBenchmark.IExample { 公共 ボイド廃棄() { } 公共の 非同期タスクの実行() { VARのユーザー= User.List(10 )。 MemoryStream.Position = 0 ; 待つSpanJson.JsonSerializer.NonGeneric.Utf8.SerializeAsync(ユーザー、MemoryStreamを); } プライベート System.IO.MemoryStreamのMemoryStream = 新しいSystem.IO.MemoryStream()。 パブリック ボイド初期(ベンチマークベンチマーク) { } }
次のこの論理には、いくつかの同時圧力測定2,4,8,16及び32(注:ここで注意、それは同時メモリ動作は、CPUの論理コアの数を超えてはならない圧力測定データの場合であれば、それ以外の場合は、部品点数のタイマーがトリガするチャンスやトリガディレイを持っていない可能性が生じます)
ここでCodeBenchmark
興味が続くことができるならば、完全に説明するために使用するhttps://github.com/IKende/CodeBenchmarkDocを