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)。
入力がさらなるデータを受け取るのを待っている場合、データフローコンポーネントはその入力に対応する要素の値を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プロパティの値をDtsPipelineComponentAttributeでtrueに設定する際、IsInputReadyメソッドの実装も提供する必要があります。
データフローエンジンは、どの入力がさらなるデータを受け取るのを待っているかを特定するために IsInputReady メソッドを呼び出します。 このメソッドの実装では、コンポーネントの各入力のステータスをブール canProcess 配列に設定します。 (入力はinputIDs配列内のID値で識別されます。)canProcess配列で入力の値をtrueに設定すると、データフローエンジンはコンポーネントのProcessInputメソッドを呼び出し、指定された入力に対してさらに多くのデータを提供します。
より多くの上流データが利用可能ですが、少なくとも1つの入力の値は常にcanProcess配列に含まれtrueなければならず、処理は停止します。
カスタムdata flowコンポーネントの入力が不均一な速度でデータを生成した場合の過剰なメモリ使用の処理については、「複数入力を持つData Flowコンポーネントの開発」を参照してください。