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?

一般的なシステム制限

この付録では、すべてのサーバ側言語全体に適用可能な制限のいくつか示します。以下のトピックについて説明します。

識別子の名前の制限については、“識別子のルールとガイドライン” を参照してください。

その他のシステム全体の制限は、"Caché パラメータ・ファイル・リファレンス" を参照してください。

長い文字列の制限

変数の値には長さの制限があります。使用している環境で長い文字列が有効化されている場合 (リリース 2012.2 以降の新しいインストールでは既定)、上限は 3,641,144 文字になります。長い文字列が有効化されていない場合、上限は 32,767 文字になります。

長い文字列を有効化または無効化するには、管理ポータルを使用します。詳しい説明は、このドキュメントで前述した “長い文字列演算の使用可能化” を参照してください。(または、"Caché パラメータ・ファイル・リファレンス" の "EnableLongStrings" セクションの説明に従って、Caché パラメータ・ファイルで EnableLongStrings パラメータの値を指定します。)

Caché では、インスタンスごとにオプションで、長い文字列の使用もサポートしています。現在のインスタンスで長い文字列を有効にするには、Config.MiscellaneousOpens in a new tab クラスの EnableLongStringsOpens in a new tab プロパティを使用します。

プロセスで実際に長い文字列が使用されると、文字列用のメモリを、そのプロセス用のパーティション・メモリ領域から割り当てるのではなく、オペレーティング・システムの malloc() バッファから割り当てます。したがって、実際の長い文字列の値へのメモリ割り当ては、[システムメモリと開始設定] ページの [プロセス・メモリあたりの最大] で設定した制限の影響を受けません。また、プロセスの $STORAGE 値に影響することもありません。

Important:

“文字列” は、入出力デバイスからの読み取りの結果に限られないことを理解することが重要です。その他のコンテキストでも、文字列は出現します。たとえば、結果セット (SQL クエリ、多数の項目を含む $LIST の構築、または XSLT 変換などの出力として返される) の行に含まれるデータのコンテキストにも文字列が出現します。

長い文字列が有効化されていない場合、Caché は、公表されているアプリケーションの上限の性能を保証できなくなります。これらの上限は、特に明記されていない限り、長い文字列が有効化されていることを前提としています。

クラスの制限

以下の制限はクラスにのみ適用されます。

クラス継承階層

制限 : 50。1 つのクラスは最大 50 階層までのサブクラスを作成できます。

外部キー

制限 : 1 クラスあたり 400。

インデックス

制限 : 1 クラスあたり 400。

メソッド

制限 : 1 クラスあたり 2000。

パラメータ

制限 : 1 クラスあたり 1000。

プロジェクション

制限 : 1 クラスあたり 200。

プロパティ

制限 : 1 クラスあたり 1000。

クエリ

制限 : 1 クラスあたり 200。

SQL 制約

制限 : 1 クラスあたり 200。

ストレージ定義

制限 : 1 クラスあたり 10。

スーパークラス

制限 : 1 クラスあたり 127。

トリガ

制限 : 1 クラスあたり 200。

XData ブロック

制限 : 1 クラスあたり 1000。

クラスおよびルーチンの制限

以下の制限はクラスとルーチンに適用されます。

クラス・メソッド参照

制限 : 1 ルーチンまたは 1 クラスあたり 32768 の一意の参照。

以下は、メソッド名が同じでもクラス名が異なるため、2 つのクラス・メソッド参照としてカウントされます。

 Do ##class(c1).abc(), ##class(c2).abc()
クラス名参照

制限 : 1 ルーチンまたは 1 クラスあたり 32768 の一意の参照。

例えば、以下は 2 つのクラス名参照としてカウントされます。

 Do ##class(c1).abc(), ##class(c2).abc()

同様に、以下も、2 つのクラス参照としてカウントされます。これは、%FileOpens in a new tab から %Library.FileOpens in a new tab への正規化がコンパイル時ではなく実行時に行われるためです。

 Do ##class(%File).Open(x)
 Do ##class(%Library.File).Open(y)
インスタンス・メソッド参照

制限 : 1 ルーチンまたは 1 クラスあたり 32768。

XY が OREF の場合、以下は、1 つのインスタンス・メソッド参照としてカウントされます。

 Do X.abc(), Y.abc()

多次元プロパティへの参照は、インスタンス・メソッドとしてカウントされます。これはコンパイラがこれらを区別できないためです。例えば、以下の文を考えてみます。

 Set var = OREF.xyz(3)

コンパイラは、この文が xyz() メソッドを参照しているか、または多次元プロパティ xyz を参照しているかを区別できません。そのため、コンパイラはこれを、インスタンス・メソッド参照としてカウントします。

制限 : 1 ルーチンあたり 65535 行 (コメント行を含む)。この制限は、INT 表現のサイズに適用されます。

リテラル (ASCII)

制限 : 1 ルーチンまたは 1 クラスあたり 65535 の ASCII リテラル。

ASCII リテラルは、どの文字も $CHAR(255) を超えない 3 つ以上の文字を含む引用符付き文字列です。

ASCII リテラルと Unicode リテラルは別々に処理され、個別の制限があります。

リテラル (Unicode)

制限 : 1 ルーチンまたは 1 クラスあたり 65535 の Unicode リテラル。

Unicode リテラルは、1 つ以上の文字が $CHAR(255) を超える引用符付き文字列です。

ASCII リテラルと Unicode リテラルは別々に処理され、個別の制限があります。

パラメータ

制限 : 1 サブルーチン、1 メソッド、または 1 ストアド・プロシージャあたり 255 のパラメータ。

プロシージャ

制限 : 1 ルーチンあたり 32767。

プロパティ読み取り参照

制限 : 1 ルーチンまたは 1 クラスあたり 32768。

この制限は、以下の例のように、プロパティの値の読み取りに関するものです。

 Set X = OREF.prop
プロパティ設定参照

制限 : 1 ルーチンまたは 1 クラスあたり 32768。

この制限は、以下の例のように、プロパティの値の設定に関するものです。

 Set OREF.prop = value
ルーチン参照

制限 : 1 ルーチンまたは 1 クラスあたり 65535。

この制限は、ルーチンまたはクラスの一意の参照 (^routine) の数に適用されます。

ターゲット参照

制限 : 1 ルーチンまたは 1 クラスあたり 65535。

ターゲットは label^routine (ラベルとルーチンの組み合わせ) です。

ターゲット参照はルーチン参照としてもカウントされます。例えば、以下は 2 つのルーチン参照と 3 つのターゲット参照としてカウントされます。

 Do Label1^Rtn, Label2^Rtn, Label1^Rtn2
TRY ブロック

制限 : 1 ルーチンあたり 65535。

変数 (プライベート)

制限 (ObjectScript) : 1 プロシージャあたり 32763。

制限 (Caché Basic または MVBasic) : 1 ルーチンあたり 32759。

変数 (パブリック)

制限 (ObjectScript) : 1 ルーチンまたは 1 クラスあたり 65503。

制限 (Caché Basic または MVBasic) : 1 ルーチンまたは 1 クラスあたり 65280。

変数名やその他の識別子の長さ制限の詳細は、このドキュメントで前述の “識別子のルールとガイドライン” を参照してください。

その他のプログラミング制限

以下のテーブルに、コードを記述する際に関連するその他の制限を示します。

%Status 値の制限

エラー・メッセージの長さ制限 : 32000 文字未満。

単一の %StatusOpens in a new tab 値に結合できる %StatusOpens in a new tab 値の最大数 : 150。

{} による入れ子

制限 : 32767 レベル。

これは、中括弧を使用するあらゆる言語要素の入れ子の最大の深さです。例 : IF { FOR { WHILE {...}}}

1 行あたりの文字数

制限 : 1 行あたり 65535 文字 (長い文字列が有効な場合)。スタジオでは、32767 文字を超える行は編集できません。

グローバル添え字、長さ

"Caché グローバルの使用法" の “グローバル参照の最大長” を参照してください。

グローバル参照、長さ

制限 : 511 文字 (エンコードされた文字数、入力した文字数 511 より少なくなる場合があります)。グローバル参照という用語は、グローバルの名前と、その添え字をすべて合わせたものを指します。詳細は、"Caché グローバルの使用法" の “グローバル参照の最大長” を参照してください。

数値

制限 (10 進数形式またはネイティブ形式) : 約 1.0E-128 ~ 9.22E145。このドキュメントで後述する、“インターシステムズ・アプリケーションでの数値の計算” を参照してください。

制限 (倍精度形式) : このドキュメントで後述する、“インターシステムズ・アプリケーションでの数値の計算” を参照してください。

FeedbackOpens in a new tab