PipelineComponent.IsInputReady(Int32[], Boolean[]) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Determina quais das entradas anexadas a um componente estão aguardando mais dados, e quais têm dados suficientes para processar e estão bloqueadas.
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())
Parâmetros
- inputIDs
- Int32[]
Uma matriz das IDs das entradas anexadas ao componente.
- canProcess
- Boolean[]
Uma matriz de valores boolianos que indicam se cada entrada está aguardando mais dados (true) ou é bloqueada (false), passada por referência.
Exemplos
No exemplo a seguir, a implementação do método IsInputReady indica que uma entrada estará esperando receber mais dados se as seguintes condições forem verdadeiras:
Mais dados upstream estão disponíveis para a entrada (
!inputEOR
).O componente não tem dados disponíveis no momento para processar a entrada nos buffers que o componente já recebeu (
inputBuffers[inputIndex].CurrentRow() == null
).
Se uma entrada estiver esperando receber mais dados, o componente de fluxo de dados indicará isso por meio da definição do valor do elemento como true
na matriz canProcess
correspondente àquela entrada.
De modo oposto, quando o componente ainda tem dados disponíveis para processar para a entrada, o exemplo suspende o processamento da entrada. O exemplo faz isso por meio da definição como false
do valor do elemento na matriz canProcess
correspondente àquela entrada.
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];
}
}
O exemplo anterior usa a matriz booliana inputEOR
para indicar se dados upstream estão disponíveis para cada entrada. EOR
no nome da matriz representa "término de conjunto de linhas" e faz referência à propriedade EndOfRowset de buffers de fluxo de dados. Em uma parte do exemplo que não é incluída aqui, o método ProcessInput verifica o valor da propriedade EndOfRowset de cada buffer de dados que recebe. Quando um valor indica true
que não há mais dados upstream disponíveis para uma entrada, o exemplo define o valor para inputEOR
true
essa entrada. Essa implementação do IsInputReady método define o valor correspondente na canProcess
matriz para false
uma entrada quando o valor indica inputEOR
que não há mais dados upstream disponíveis para a entrada.
Comentários
Quando você define o valor da Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propriedade como true
no DtsPipelineComponentAttribute, você também deve fornecer uma implementação para o IsInputReady método.
O mecanismo de fluxo de dados chama o IsInputReady método para determinar quais entradas estão aguardando para receber mais dados. Na implementação desse método, você define o status de cada uma das entradas do componente na matriz booliana canProcess
. (As entradas são identificadas por seus valores de ID na inputIDs
matriz.) Quando você define o valor de uma entrada na true
canProcess
matriz, o mecanismo de fluxo de dados chama o método do ProcessInput componente e fornece mais dados para a entrada especificada.
Embora mais dados upstream estejam disponíveis, o valor de pelo menos uma entrada deve estar true
sempre na matriz ou paradas canProcess
de processamento.
Para obter mais informações sobre o tratamento do uso excessivo de memória se as entradas de um componente de fluxo de dados personalizado produzirem dados em taxas desiguais, consulte Desenvolver componentes Поток данных com várias entradas.