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)。

入力がさらなるデータを受け取るのを待っている場合、データフローコンポーネントはその入力に対応する要素の値をtruecanProcess配列の価値に設定することでそれを示します。

逆に、コンポーネントが入力に対して処理可能なデータを持っている場合、この例は入力の処理を一時停止します。 この例では、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];  
    }  
}  

前述の例では、各入力に対してより多くの上流データが利用可能かどうかを示すためにブール inputEOR 配列を用いています。 EOR 配列名の「rowsetの終わり」を表し、データフローバッファの EndOfRowset 特性を示しています。 ここに含まれていない例の一部では、 ProcessInput メソッドが受信した各バッファのデータに対して EndOfRowset プロパティの値をチェックします。 trueの値が入力に対して上流データがもう利用できないことを示す場合、その入力に対してinputEORの値をtrueに設定します。 このIsInputReadyメソッドの実装は、inputEORの値が入力に対して上流データがもう残っていないことを示したとき、canProcess配列の対応する値をfalseに設定します。

注釈

Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressureプロパティの値をDtsPipelineComponentAttributetrueに設定する際、IsInputReadyメソッドの実装も提供する必要があります。

データフローエンジンは、どの入力がさらなるデータを受け取るのを待っているかを特定するために IsInputReady メソッドを呼び出します。 このメソッドの実装では、コンポーネントの各入力のステータスをブール canProcess 配列に設定します。 (入力はinputIDs配列内のID値で識別されます。)canProcess配列で入力の値をtrueに設定すると、データフローエンジンはコンポーネントのProcessInputメソッドを呼び出し、指定された入力に対してさらに多くのデータを提供します。

より多くの上流データが利用可能ですが、少なくとも1つの入力の値は常にcanProcess配列に含まれtrueなければならず、処理は停止します。

カスタムdata flowコンポーネントの入力が不均一な速度でデータを生成した場合の過剰なメモリ使用の処理については、「複数入力を持つData Flowコンポーネントの開発」を参照してください。

適用対象