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[]

각 입력이 추가 데이터를 기다리고 있는지(참), 차단되었는지(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];  
    }  
}  

앞서 언급한 예시는 불 inputEOR 배열을 사용하여 각 입력에 대해 더 많은 상류 데이터가 있는지 여부를 나타냅니다. EOR 배열 이름에서 '행셋 끝'을 나타내며 데이터 흐름 버퍼의 특성을 나타냅니다 EndOfRowset . 여기 포함되지 않은 예제의 일부에서는, 메서드가 ProcessInput 받은 각 데이터 버퍼마다 속성의 EndOfRowset 값을 확인합니다. 값이 true 입력에 대한 더 이상 상류 데이터가 없음을 나타내면, 예제는 해당 입력에 대해 의 값을 inputEOR 설정합니다 true . 이 메서드 구현 IsInputReady 은 해당 입력에 대해 해당 값이 더 이상 상류 데이터가 없음을 나타내는 경우inputEOR, 해당 배열의 canProcess 값을 로 false 설정합니다.

설명

속성 trueDtsPipelineComponentAttributeMicrosoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure 값을 로 설정하면 메서드에 대한 IsInputReady 구현도 제공해야 합니다.

데이터 흐름 엔진은 어떤 입력이 더 많은 데이터를 받기를 기다리고 있는지 결정하기 위해 메서드를 IsInputReady 호출합니다. 이 방법 구현에서는 불리언 canProcess 배열에서 각 컴포넌트 입력의 상태를 설정합니다. (입력은 배열 내 inputIDs ID 값으로 식별됩니다.) 배열에서 canProcess 입력값이 를 설정 true 하면, 데이터 흐름 엔진이 컴포넌트의 메서드를 ProcessInput 호출하여 지정된 입력에 대해 더 많은 데이터를 제공합니다.

더 많은 상류 데이터가 제공되지만, 적어도 하나의 입력값이 항상 배열에 canProcess 있어야 true 하며, 그렇지 않으면 처리가 중단됩니다.

커스텀 data flow 컴포넌트의 입력이 불균등한 속도로 데이터를 생성할 경우 과도한 메모리 사용량 처리에 대한 자세한 내용은 'Developing Data Flow Components with Multiple Inputs'를 참고하세요.

적용 대상