.NET メソッド呼び出しで BDL スクリプトを実行する場合、Silk Performer で Microsoft .NET 共通言語ランタイム (.NET CLR) をホストする必要があります。 .NET CLR をホストしたり、.NET オブジェクトをロードする場合は、仮想ユーザー プロセス (コンテナ) に使用される追加のメモリが必要となります。
Silk Performer では、各仮想ユーザーが独自のアプリケーション ドメインで実行する必要があるか、仮想ユーザー コンテナ内のすべての仮想ユーザーがアプリケーション ドメインを共有できるかを指定できます。 仮想ユーザーごとに 1 つのアプリケーション ドメインとは、個々の仮想ユーザーのすべてのオブジェクトが、同じ仮想ユーザー コンテナ内の他のユーザーから切り離されることを意味します。
仮想ユーザー コンテナごとに 1 つのアプリケーション ドメインとは、すべてのオブジェクトが同じドメインに存在し、互いに影響を及ぼすことを意味します。 この設定は、プロジェクトのプロファイル設定で変更できます。
追加のアプリケーション ドメインごとに、追加のメモリおよび .NET CLR による管理オーバーヘッドが必要です。
次の表に、仮想ユーザー プロセッサで動作するユーザー数およびアプリケーション ドメイン設定に基づいたメモリ使用量 (MB 単位) を示します。 これは、負荷テストの開始時における初期使用量 (.NET オブジェクトはロードされていない) です。
|
仮想ユーザー数 1 |
仮想ユーザー数 2 |
仮想ユーザー数 3 |
仮想ユーザー数 4 |
仮想ユーザー数 10 |
仮想ユーザー数 20 |
仮想ユーザー数 50 |
---|---|---|---|---|---|---|---|
.NET 呼び出しなし (通常の BDL スクリプト) | 1.668 | 1.760 | 1.836 | 1.904 | 2.352 | 3.124 | 5.484 |
ユーザーごとのアプリケーション ドメイン | 5.268 | 6.644 | 6.828 | 6.940 | 7.916 | 9.364 | 13.868 |
コンテナごとのアプリケーション ドメイン | 5.268 | 5.404 | 5.488 | 5.564 | 6.036 | 6.852 | 9.368 |
次の表に、単純な .NET オブジェクトをロードした後のメモリ使用量を示します。 オブジェクトは 3 つのメソッドを定義しますが、メンバは存在しません。
|
仮想ユーザー数 1 |
仮想ユーザー数 2 |
仮想ユーザー数 3 |
仮想ユーザー数 4 |
仮想ユーザー数 10 |
仮想ユーザー数 20 |
仮想ユーザー数 50 |
---|---|---|---|---|---|---|---|
ユーザーごとのアプリケーション ドメイン | 5.680 | 7.404 | 7.816 | 8.296 | 11.000 | 15.300 | 28.664 |
コンテナごとのアプリケーション ドメイン | 5.688 | 5.812 | 5.900 | 6.012 | 6.620 | 7.628 | 10.240 |
上記の表からわかるように、仮想ユーザーごとに 1 つのアプリケーション ドメインは、コンテナごとに 1 つのアプリケーション ドメインより多くのメモリを必要とします。 プロジェクト ファイルでのデフォルト設定は、ユーザーごとに 1 つのアプリケーション ドメインです。 これは、あるユーザーが作成したオブジェクトは、他のユーザーのオブジェクトに影響を及ぼすことができないからです。 オブジェクトがアプリケーション ドメインからグローバル リソースにアクセスする場合に、問題が生じないことを確認してください。
.NET CLR をホストするために必要な初期メモリ容量は約 3.5 MB です。 .NET CLR は、仮想ユーザー コンテナごとにのみホストされ、アプリケーション ドメイン設定の影響を受けません。
オブジェクトをロードする際のメモリ使用量は、オブジェクトのサイズによって異なります。 上記の表では、ロードされたオブジェクトの例にはメンバが存在しません。 メンバが存在するオブジェクトをロードする場合のメモリ使用量は異なります。
参照されなくなったオブジェクトからメンバを解放するには、DotNetFreeObject を呼び出します。