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 entradas conectadas a um componente estão esperando mais dados, quais têm dados suficientes para processar e estão bloqueados.
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[]
Um array dos IDs das entradas conectadas ao componente.
- canProcess
- Boolean[]
Um array de valores booleanos que indicam se cada entrada está esperando por mais dados (verdadeiro) ou está bloqueada (falso), passada por referência.
Exemplos
No exemplo a seguir, a implementação do IsInputReady método indica que uma entrada está aguardando para receber mais dados quando as seguintes condições são verdadeiras:
Mais dados a montante estão disponíveis para a entrada (
!inputEOR).O componente atualmente não possui dados disponíveis para processar para a entrada nos buffers que o componente já recebeu (
inputBuffers[inputIndex].CurrentRow() == null).
Se uma entrada estiver aguardando receber mais dados, o componente de fluxo de dados indica isso definindo para true o valor do elemento no canProcess array que corresponde àquela entrada.
Por outro lado, quando o componente ainda tem dados disponíveis para processar para a entrada, o exemplo suspende o processamento da entrada. O exemplo faz isso definindo para false o valor do elemento no canProcess array que corresponde à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 o array booleano inputEOR para indicar se há mais dados a montante disponíveis para cada entrada.
EOR no nome do array representa "fim de rowset" e refere-se à EndOfRowset propriedade dos buffers de fluxo de dados. Em uma parte do exemplo que não está incluída aqui, o ProcessInput método verifica o valor da EndOfRowset propriedade para cada buffer de dados que recebe. Quando um valor de true indica que não há mais dados a montante disponíveis para uma entrada, o exemplo define o valor de inputEOR para true essa entrada. Essa implementação do IsInputReady método define o valor correspondente no canProcess array para false uma entrada quando o valor de inputEOR indica que não há mais dados a montante disponíveis para a entrada.
Comentários
Quando você define o valor da Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propriedade para true em , DtsPipelineComponentAttributevocê também deve fornecer uma implementação para o IsInputReady método.
O motor de fluxo de dados chama o IsInputReady método para determinar quais entradas estão esperando receber mais dados. Na sua implementação desse método, você define o status de cada entrada do componente no array booleano canProcess . (As entradas são identificadas por seus valores de identificação no inputIDs array.) Quando você define o valor de uma entrada para true no canProcess array, o motor de fluxo de dados chama o método do ProcessInput componente e fornece mais dados para a entrada especificada.
Embora haja mais dados a montante, o valor de pelo menos uma entrada deve sempre estar true no canProcess array, ou o processamento para.
Para mais informações sobre o manejo do uso excessivo de memória caso as entradas de um componente custom data flow produzam dados em taxas irregulares, veja Developing Fluxo de Dados Components with Multiple Inputs.