.NET でのメモリ使用量

.NET メソッド呼び出しで BDL スクリプトを実行する場合、Silk PerformerMicrosoft .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 を呼び出します。