다음을 통해 공유


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];  
    }  
}  

위의 예에서는 부울 inputEOR 배열을 사용하여 각 입력에 사용 가능한 추가 업스트림 데이터가 있는지 여부를 나타냅니다. 이 배열 이름에서 EOR은 "행 집합의 끝(end of rowset)"을 나타내며 데이터 흐름 버퍼의 EndOfRowset 속성을 참조합니다. 이 예에서 여기에 표시되지 않은 일부분인 ProcessInput 메서드는 받은 각 데이터 버퍼의 EndOfRowset 속성 값을 확인합니다. 값이 true 입력에 사용할 수 있는 업스트림 데이터가 더 이상 없음을 나타내는 경우 이 예제에서는 해당 입력에 inputEORtrue 대한 값을 설정합니다. 이 메서드 구현 IsInputReady 은 값이 입력에 사용할 수 있는 canProcess 업스트림 데이터가 더 이상 없음을 나타내는 경우 배열 falseinputEOR 해당 값을 입력으로 설정합니다.

설명

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

데이터 흐름 엔진은 메서드를 IsInputReady 호출하여 더 많은 데이터를 받기 위해 대기 중인 입력을 결정합니다. 이 메서드의 구현에서 부울 canProcess 배열에서 각 구성 요소의 입력 상태를 설정합니다. (입력은 배열의 ID 값으로 inputIDs 식별됩니다.) 입력 true 값을 배열에 canProcess 설정할 때 데이터 흐름 엔진은 구성 요소의 ProcessInput 메서드를 호출하고 지정된 입력에 대해 더 많은 데이터를 제공합니다.

더 많은 업스트림 데이터를 사용할 수 있지만 하나 이상의 입력 값은 항상 배열에 있거나 처리가 중지되어야 truecanProcess 합니다.

사용자 지정 데이터 흐름 구성 요소의 입력이 균일하지 않은 속도로 데이터를 생성하는 경우 과도한 메모리 사용 처리에 대한 자세한 내용은 여러 입력을 사용하여 Data Flow 구성 요소 개발을 참조하세요.

적용 대상