FAQ
問題:Microsoft .NET Framework アプリケーションにて、リモート COM オブジェクトを明示的に解放する必要がある
ナレッジ番号:1718 | 登録日:2023/05/29 | 更新日:2024/11/21
【概要】
Microsoft .NET Framework 環境で ArcGIS Server アプリケーションを開発する際に、リモート COM オブジェクトのリソースを管理するため、いくつかのプログラミング パターンを実装する必要が生じることがあります。.NET 環境において COM オブジェクトの参照を解放するためには、一般的に以下 3 種類の方法が利用されています。- IDisposable パターンを利用し、ESRI のクラスや WebObject を using ブロック(C#)や try/catch ブロック(VB)内で使用してサーバ コンテキストを明示的に解放する
- アプリケーションの生存期間中、定期的にガベージ コレクションを実行する
- アプリケーション内で作成したすべての COM オブジェクト インスタンスに対して ManageLifetime() を呼び出す
上記のいずれも正常に動作させることができますが、相当量のコーディングが必要となり、またアプリケーションのパフォーマンスも低下させてしまいます。
ArcGIS Server のリソースを管理するための追加情報がこちらに示されています(英語): Managing ArcGIS Server Resources
【原因】
Microsoft .NET Framework 1.1 のガベージ コレクション メカニズムには不具合があり、リモート サーバにおける COM オブジェクト(DCOM)の作成と参照に影響します。 ArcGIS Server は DCOM 通信を使用しているため、この不具合は Microsoft .NET Framework における ArcGIS Server での全ての ArcObjects の使用に影響を及ぼします。 この不具合によって、DCOM サーバ上の COM オブジェクトがガベージ コレクションでは解放されないため、Marshal.ReleaseComObject() を使用して明示的に解放しない限り、DCOM サーバ上に COM オブジェクトが蓄積されます。DCOM サーバは、COM オブジェクトを保持しておくべきかどうか、クライアントに対し定期的に確認(ping)を行います。 解放されない COM オブジェクトの数が増加するに従ってping に要する時間も増大し、最終的には DCOM サーバを動作不能にしてしまう恐れがあります。【解決方法】
以下の条件を満たしている場合、もしくはホットフィックス(Microsoft .NET-COM HotFix)が適用済みの場合は、リモート COM オブジェクトの明示的な解放は必須ではありません。ホットフィックス情報の概要は以下の通りです:
- Microsoft .NET Framework
.NET Framework 1.1 では、ホットフィックスをインストールする前に、必ず Service Pack 1 をインストールしてください。
.NET Framework 2.0 には、ホットフィックスが含まれています。
ArcGIS Server for the Microsoft .NET Framework(9.1)を動作させるマシンには、.NET Framework 1.1 の Service Pack 1 とホットフィックスをインストールしてください。
- オペレーティング システム
Windows 2000 、Windows XP(サービスパックなし)、Windows XP SP1、Windows 2003 (サービスパックなし) 環境では、必ずこのホットフィックスをインストールしてください。Windows 2003 Server SP1 と Windows XP SP2 環境ではこのホットフィックスは含まれています。
ArcGIS Server - Server Object Container process(ArcSOC.exe)を動作させるマシンには、それぞれのオペレーティング システムに対応したホットフィックスをインストールしてください。
関連情報:
[FIX] COM + コンポーネントと共通言語ランタイムを使用する .NET Framework 1. 1 アプリケーション実行すると、段階的なシステムのパフォーマンス低下が発生します。
ESRI Article ID : 30609
メタデータ
種類
製品