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 conectadas a un componente están esperando más datos, cuáles tienen suficientes datos para procesar y están 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[]
Un array de los IDs de las entradas conectadas al componente.
- canProcess
- Boolean[]
Un array de valores booleanos que indican si cada entrada está esperando más datos (verdadero) o está bloqueada (falso), transmitido por referencia.
Ejemplos
En el siguiente ejemplo, la implementación del IsInputReady método indica que una entrada está esperando recibir más datos cuando se cumplen las siguientes condiciones:
Hay más datos aguas arriba disponibles para la entrada (
!inputEOR).Actualmente, el componente no dispone de datos para procesar para la entrada en los búferes que ya ha recibido (
inputBuffers[inputIndex].CurrentRow() == null).
Si una entrada está esperando recibir más datos, el componente de flujo de datos lo indica estableciendo al true valor del elemento del canProcess array que corresponde a esa entrada.
Por el contrario, cuando el componente aún tiene datos disponibles para procesar para la entrada, el ejemplo suspende el procesamiento de la entrada. El ejemplo lo hace estableciendo el false valor del elemento en el canProcess array 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 el array booleano inputEOR para indicar si hay más datos aguas arriba disponibles para cada entrada.
EOR en el nombre del array representa "fin del conjunto de filas" y se refiere a la EndOfRowset propiedad de los búferes de flujo de datos. En una parte del ejemplo que no se incluye aquí, el ProcessInput método comprueba el valor de la EndOfRowset propiedad para cada buffer de datos que recibe. Cuando un valor de true indica que ya no hay datos aguas arriba disponibles para una entrada, el ejemplo establece el valor de inputEOR a true para esa entrada. Esta implementación del IsInputReady método establece el valor correspondiente en el canProcess array a false para una entrada cuando el valor de inputEOR indica que no hay más datos aguas arriba disponibles para la entrada.
Comentarios
Cuando estableces el valor de la Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propiedad en true , DtsPipelineComponentAttributetambién debes proporcionar una implementación para el IsInputReady 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 tu implementación de este método, estableces el estado de cada una de las entradas del componente en el array booleano canProcess . (Las entradas se identifican por sus valores ID en el inputIDs array.) Cuando se establece el valor de una entrada en true el canProcess array, 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 aguas arriba disponibles, el valor de al menos una entrada debe estar true siempre en el canProcess array, o el procesamiento se detiene.
Para más información sobre el manejo del uso excesivo de memoria si las entradas de un componente de data flow personalizado producen datos a velocidades desiguales, véase Developing Data Flow Components with Multiple Inputs.