PipelineComponent.IsInputReady(Int32[], Boolean[]) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Determina quali ingressi collegati a un componente stanno aspettando altri dati, e quali hanno abbastanza dati da elaborare e sono bloccati.
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())
Parametri
- inputIDs
- Int32[]
Un array degli ID degli ingressi collegati al componente.
- canProcess
- Boolean[]
Un array di valori booleani che indicano se ogni input sta aspettando altri dati (vero) o se è bloccato (falso), passato per riferimento.
Esempio
Nel seguente esempio, l'implementazione del IsInputReady metodo indica che un input sta aspettando di ricevere altri dati quando sono verificate le seguenti condizioni:
Sono disponibili più dati a monte per l'input (
!inputEOR).Il componente attualmente non dispone di dati da elaborare per l'input nei buffer che il componente ha già ricevuto (
inputBuffers[inputIndex].CurrentRow() == null).
Se un input è in attesa di ricevere altri dati, la componente di flusso dati lo indica impostando al true valore dell'elemento nell'array canProcess che corrisponde a quell'input.
Al contrario, quando il componente ha ancora dati disponibili da elaborare per l'input, l'esempio sospende l'elaborazione dell'input. L'esempio lo fa impostando al false valore dell'elemento nell'array canProcess che corrisponde a quell'input.
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];
}
}
L'esempio precedente utilizza l'array booleano inputEOR per indicare se sono disponibili più dati a monte per ogni input.
EOR nel nome dell'array rappresenta "fine del rowset" e si riferisce alla EndOfRowset proprietà dei data flow buffer. In una parte dell'esempio che non è inclusa qui, il ProcessInput metodo verifica il valore della EndOfRowset proprietà per ogni buffer di dati che riceve. Quando un valore di true indica che non ci sono più dati a monte disponibili per un input, l'esempio imposta il valore di inputEOR to true per quell'input. Questa implementazione del IsInputReady metodo imposta il valore corrispondente nell'array canProcess a false per un input quando il valore di inputEOR indica che non ci sono più dati a monte disponibili per l'input.
Commenti
Quando imposti il valore della Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure proprietà a true nel DtsPipelineComponentAttribute, devi anche fornire un'implementazione per il IsInputReady metodo.
Il motore di flusso dati chiama il IsInputReady metodo per determinare quali ingressi stanno aspettando di ricevere altri dati. Nella tua implementazione di questo metodo, imposti lo stato di ciascuno degli input del componente nell'array booleano canProcess . (Gli ingressi sono identificati dai loro valori ID nell'array inputIDs .) Quando imposti il valore di un input a true nell'array canProcess , il motore di flusso dati chiama il metodo del ProcessInput componente e fornisce più dati per l'input specificato.
Sebbene siano disponibili più dati a monte, il valore di almeno un input deve sempre essere true nell'array canProcess , altrimenti si interrompe l'elaborazione.
Per maggiori informazioni sulla gestione dell'uso eccessivo di memoria se gli ingressi di un componente custom data flow producono dati a velocità disomogene, vedi Developing Flusso di dati Components with Multiple Inputs.