次の方法で共有


PipelineComponent.IsInputReady(Int32[], Boolean[]) メソッド

定義

コンポーネントにアタッチされている入力のうち、どの入力がデータを待っているか、およびどの入力が十分な処理対象のデータを持ちながらブロックされているかを判定します。

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.SupportsBackPressureDtsPipelineComponentAttribute プロパティの値を true に設定する場合は、IsInputReady メソッドも実装する必要があります。

データ フロー エンジンは、IsInputReady メソッドを呼び出して、どの入力が追加のデータを待っているかを判定します。 このメソッドの実装では、コンポーネントの各入力の状態を Boolean 型の canProcess 配列に設定します (入力は配列内の inputIDs ID 値によって識別されます)。配列内でcanProcess入力の値をtrue設定すると、データ フロー エンジンはコンポーネントのProcessInputメソッドを呼び出し、指定された入力により多くのデータを提供します。

追加の上流データを使用できるときは、canProcess 配列内で 1 つ以上の入力の値を常に true に設定する必要があります。そうでないと、処理が停止します。

カスタム データ フロー コンポーネントの入力が不均等なレートでデータを生成する場合の過剰なメモリ使用量の処理の詳細については、「複数の入力を含む Data Flow コンポーネントの開発」を参照してください。

適用対象