Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

最善の使用方法

一般的に、通信および CPU は非常に高速です。特に、タスクが多量にない限り、コンピュータは細かい要求を送信する多数のユーザに遅れず対応できます。しかし、クライアント・マシンの負荷は、1 台のクライアントによってのみかかります。一方で、ネットワークおよびサーバ上の負荷は、同時にすべてのクライアントからの蓄積となります。したがって、メッセージのトラフィック、サイズ、またはサーバの負荷を少しずつでも増大させるような操作は、全体的なスループットや能力に多大な影響を及ぼします。以下のいくつかの操作は、このように累積的な負荷を必要最小限に抑えて、スループット、応答時間、またはシステムの総合的な能力の向上を目指しています。

必要のないプロパティを削除する

クライアントからサーバに送信される実行メッセージには、必ず、NameSpaceCodeVALUEP0P9PLIST などのプロパティ用のフィールドが含まれています。NameSpaceCode フィールドは返されるメッセージで削除されますが、その他のすべてのプロパティについて、変更されたかどうかに関係なく、新しい値が返されます。したがって、メッセージのサイズ (および、メッセージの組み立て、送信、および分解にかかる時間) は、全プロパティの現在値の合計サイズによって変わります。使用率の高いクライアントが多数ある場合、ネットワーク帯域幅とサーバの能力に及ぶ影響はかなり大きくなります。

通信が高速で、メッセージが比較的小さくても、大量のメッセージを送信するときに、スピードが問題となる場合は、帯域幅が消費されないようにメッセージで使用されていないプロパティをすべて削除することをお勧めします。これらの VisM プロパティはサーバとの通信を目的とするもので、クライアント上での長期保存には効率的ではありません。

また、ミラーリングされたプロパティは、メッセージごとに作成され、破棄されるので、サーバ上でのストレージには使用できません。

アプリケーションをシャットダウンしたときに明示的に切断する

影響は小さいですが、サーバから切断せずにクライアントをシャットダウンすると、チャネルで TCP エラーが発生します。これにより、サーバ・コードで I/O エラーが発生し、これに応答して、サーバ・ジョブがシャットダウンされます (クライアントと通信できなくなったサーバはそれ以上使用されないので、これは正しい応答と見なされます)。代わりに、明示的に接続を切断して、サーバを無理なくシャットダウンできるようにすることをお勧めします。

再帰的、または非同期的なサーバ呼び出し

各サーバ・チャネルでの通信はすべて同期的に行われます。つまり、あるメッセージが送信され、受信されてから、次のメッセージが送信される必要があります (この要件は、Caché Direct により強制されています。あるメッセージが保留されているときに、別のメッセージを送信しようとすると、エラー条件が返されます)。シングル・スレッド・クライアントとシングル・サーバの一般的な使用例では多くの場合、これは問題になりません。しかし、この安全性を回避する方法、つまり同期的に発生しないイベントがあります。タイマ・イベントと、Visual Basic DoEvents() メソッドはその 2 つです。

クライアント上のタイマ

定義により、タイマは非同期イベントです。タイマは、他に行われている処理には干渉しないように設定することができます。例えば、進捗状況またはサーバで別のイベントが発生したかどうかを確認するように、タイマをセットアップすることが可能です。ただし、長い処理を発生させるメッセージをサーバに送信した場合、処理実行中、そのチャネルは使用できなくなります。進捗状況を確認する場合、サーバに定期的にコールバックさせて進捗状況を報告させるか、クライアントから別のチャネルに問い合わせを送信する必要があります。クライアントを独占せずに、長時間にわたるサーバ操作を実行するには、別のプロセスにジョブを渡して作業を実行させてから、クライアントに戻る方法もあります。このためにチャネルがもう 1 つ必要になることはありませんが、独立したジョブが 1 つ必要になります。メッセージの処理中にタイマが作動すると、別のメッセージの送信が試みられる可能性があります。この場合、Caché Direct はこのメッセージを受け入れず、“nonsynchronous communication” エラーを返します。

Visual Basic の DoEvents 関数

Visual Basic には、Windows イベント・ループを明示的に呼び出す DoEvents という組み込み関数があります。多くの場合、他の操作の実行中に、再描画を直ちに実行するために使用されます。あるサーバ・メッセージの処理中に、DoEvents がサーバ・メッセージを発生させると、危険要因となります。(例えば、DoEvents は、ユーザに別のタスクの継続を許可します。このタスクにより、サーバ・メッセージが発生する可能性があります)。理論上は、これはコールバックでのみ発生します。この場合、新しい再帰的なメッセージがサーバに送信され、元のメッセージのコンテキストを破壊する可能性があるため、DoEvents は特に厄介です。ここから先は危険です。原則として、DoEvents を呼び出すコールバックは使用しないでください。使用する場合、スタックが完全に戻されるまでユーザ入力を無効にするか、少なくともサーバへの呼び出しを禁止するためのフラグがアプリケーションに必要です。

FeedbackOpens in a new tab