PipelineComponent.IsInputReady(Int32[], Boolean[]) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
コンポーネントにアタッチされている入力のうち、どの入力がデータを待っているか、およびどの入力が十分な処理対象のデータを持ちながらブロックされているかを判定します。
public:
virtual void IsInputReady(cli::array <int> ^ inputIDs, cli::array <bool> ^ % canProcess);
public virtual void IsInputReady (int[] inputIDs, ref bool[] canProcess);
abstract member IsInputReady : int[] * Boolean[] -> unit
override this.IsInputReady : int[] * Boolean[] -> unit
Public Overridable Sub IsInputReady (inputIDs As Integer(), ByRef canProcess As Boolean())
パラメーター
- inputIDs
- Int32[]
コンポーネントにアタッチされている入力の ID の配列です。
- canProcess
- Boolean[]
各入力がより多くのデータ (true) を待機しているか、ブロック (false) されているかを示すブール値の配列。参照渡しされます。
例
次の例では、IsInputReady の実装により、以下の条件に該当する場合に入力が追加のデータを待っていることを示します。
入力に対する追加の上流データがある (
!inputEOR
)。コンポーネントが、受信済みのバッファーで入力に対して処理できるデータを現在持っていない (
inputBuffers[inputIndex].CurrentRow() == null
)。
入力が追加のデータを待っている場合、データ フロー コンポーネントは、この入力に対応する canProcess
配列の要素の値を true
に設定することによってこの状態を示します。
逆に、コンポーネントが入力に対して処理できるデータを持っている場合、この例では入力の処理を中断します。 この例では、入力に対応する canProcess
配列の要素の値を false
に設定することによってこれを行います。
public override void IsInputReady(int[] inputIDs, ref bool[] canProcess)
{
for (int i = 0; i < inputIDs.Length; i++)
{
int inputIndex = ComponentMetaData.InputCollection.GetObjectIndexByID(inputIDs[i]);
canProcess[i] = (inputBuffers[inputIndex].CurrentRow() == null)
&& !inputEOR[inputIndex];
}
}
前の例は、Boolean 型の inputEOR
配列を使用して、各入力で追加のアップストリーム データを使用できるかどうかを示します。 配列名の EOR
は "行セットの末尾 (end of rowset)" を示し、データ フロー バッファーの EndOfRowset プロパティを参照します。 ここに含まれていない例の部分では、ProcessInput メソッドを使用して、受信するデータの各バッファーに対して EndOfRowset プロパティの値を確認します。 値 true
によって入力に対してこれ以上の上流データがないことが示された場合、この例では、その入力の inputEOR
の値を true
に設定します。 IsInputReady メソッドのこの実装では、入力に対する上流データがこれ以上ないことが inputEOR
の値によって示された場合に、入力に対する canProcess
配列の対応する値を false
に設定します。
注釈
Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure で DtsPipelineComponentAttribute プロパティの値を true
に設定する場合は、IsInputReady メソッドも実装する必要があります。
データ フロー エンジンは、IsInputReady メソッドを呼び出して、どの入力が追加のデータを待っているかを判定します。 このメソッドの実装では、コンポーネントの各入力の状態を Boolean 型の canProcess
配列に設定します (入力は配列内の inputIDs
ID 値によって識別されます)。配列内でcanProcess
入力の値をtrue
設定すると、データ フロー エンジンはコンポーネントのProcessInputメソッドを呼び出し、指定された入力により多くのデータを提供します。
追加の上流データを使用できるときは、canProcess
配列内で 1 つ以上の入力の値を常に true
に設定する必要があります。そうでないと、処理が停止します。
カスタム データ フロー コンポーネントの入力が不均等なレートでデータを生成する場合の過剰なメモリ使用量の処理の詳細については、「複数の入力を含む Data Flow コンポーネントの開発」を参照してください。