PipelineComponent.IsInputReady(Int32[], Boolean[]) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Determina cuáles de las entradas adjuntas a un componente están esperando recibir más datos y cuáles tienen suficientes datos para procesar y están 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[]
Matriz de los identificadores de las entradas adjuntas al componente.
- canProcess
- Boolean[]
Matriz de valores booleanos que indican si cada entrada está esperando más datos (true) o está bloqueado (false), pasado por referencia.
Ejemplos
En el siguiente ejemplo, la implementación del método IsInputReady indica que una entrada está esperando recibir más datos cuando se cumplen las condiciones siguientes:
Los datos de nivel superior están disponibles para la entrada (
!inputEOR
).El componente no tiene los datos disponibles actualmente para procesar la entrada en los búferes que el componente ya haya recibido (
inputBuffers[inputIndex].CurrentRow() == null
).
Si una entrada espera recibir más datos, el componente de flujo de datos lo indica estableciendo en true
el valor del elemento en la matriz canProcess
que corresponde a esa entrada.
Por el contrario, cuando el componente todavía tiene los datos disponibles para procesar la entrada, el ejemplo suspende su procesamiento. Para ello, en el ejemplo se establece en false
el valor del elemento en la matriz canProcess
que corresponde a esa 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];
}
}
El ejemplo anterior utiliza la matriz inputEOR
de tipo Boolean para indicar si los datos de nivel superior están disponibles para cada entrada. EOR
en el nombre de la matriz representa "fin del conjunto de filas" y hace referencia a la propiedad EndOfRowset de los búferes del flujo de datos. En una parte del ejemplo que no está incluido aquí, el método ProcessInput comprueba el valor de la propiedad EndOfRowset cada búfer de datos que recibe. Cuando un valor de true
indica que no hay más datos ascendentes disponibles para una entrada, el ejemplo establece el valor de inputEOR
en true
para esa entrada. Esta implementación del IsInputReady método establece el valor correspondiente de la canProcess
matriz false
en para una entrada cuando el valor de inputEOR
indica que no hay más datos ascendentes disponibles para la entrada.
Comentarios
Al establecer el valor de la Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propiedad en en DtsPipelineComponentAttribute, también debe proporcionar una implementación para el IsInputReadytrue
método .
El motor de flujo de datos llama al IsInputReady método para determinar qué entradas están esperando recibir más datos. En la implementación de este método, se establece el estado de cada una de las entradas del componente en la matriz booleana canProcess
. (Las entradas se identifican mediante sus valores de identificador en la inputIDs
matriz). Al establecer el valor de una entrada true
en en la canProcess
matriz, el motor de flujo de datos llama al método del ProcessInput componente y proporciona más datos para la entrada especificada.
Aunque hay más datos ascendentes disponibles, el valor de al menos una entrada debe estar true
siempre en la canProcess
matriz o el procesamiento se detiene.
Para obtener más información sobre el control del uso excesivo de memoria si las entradas de un componente de flujo de datos personalizado producen datos a velocidades desiguales, consulte Desarrollo de componentes de Data Flow con varias entradas.