PipelineComponent.IsInputReady(Int32[], Boolean[]) Metodo

Definizione

Determina quali input associati a un componente sono in attesa di più dati e quali dispongono di dati sufficienti 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[]

Matrice di ID degli input associati al componente.

canProcess
Boolean[]

Matrice di valori booleani che indicano se ogni input è in attesa di più dati (true) o è bloccato (false), passato per riferimento.

Esempio

Nell'esempio seguente l'implementazione del metodo IsInputReady indica che un input è in attesa di ricevere altri dati quando sussistono le condizioni seguenti:

  • È disponibile una maggiore quantità di dati upstream per l'input (!inputEOR).

  • Per il componente non sono attualmente disponibili dati da elaborare per l'input nei buffer già ricevuti dal componente (inputBuffers[inputIndex].CurrentRow() == null).

Se un input è in attesa di ricevere una maggiore quantità di dati, il componente flusso di dati indica questa situazione impostando su true il valore dell'elemento nella matrice canProcess che corrisponde a quell'input.

Viceversa, se per il componente sono ancora disponibili dati da elaborare per l'input, viene sospesa l'elaborazione dell'input. A tale scopo, viene impostato su false il valore dell'elemento nella matrice 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];  
    }  
}  

Nell'esempio precedente viene usata la matrice inputEOR booleana per indicare se sono disponibili più dati upstream per ogni input. EOR nel nome della matrice rappresenta "la fine del set di righe" e fa riferimento alla proprietà EndOfRowset dei buffer del flusso di dati. In una parte dell'esempio non inclusa in questo argomento, il metodo ProcessInput controlla il valore della proprietà EndOfRowset per ogni buffer di dati ricevuto. Quando un valore indica true che non sono disponibili più dati upstream per un input, nell'esempio viene impostato il valore di inputEOR su true per tale input. Questa implementazione del IsInputReady metodo imposta il valore corrispondente nella canProcess matrice su false per un input quando il valore di inputEOR indica che non sono disponibili più dati upstream per l'input.

Commenti

Quando si imposta il valore della Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure proprietà su true in DtsPipelineComponentAttribute, è necessario fornire anche un'implementazione per il IsInputReady metodo .

Il motore del flusso di dati chiama il IsInputReady metodo per determinare quali input sono in attesa di ricevere più dati. Nell'implementazione di questo metodo si imposta lo stato di ogni input del componente nella matrice booleana canProcess . Gli input vengono identificati dai relativi valori ID nella inputIDs matrice. Quando si imposta il valore di un input su true nella canProcess matrice, il motore del flusso di dati chiama il metodo del ProcessInput componente e fornisce altri dati per l'input specificato.

Mentre sono disponibili più dati upstream, il valore di almeno un input deve essere true sempre nella matrice o l'elaborazione canProcess viene arrestata.

Per altre informazioni sulla gestione di un utilizzo eccessivo della memoria se gli input di un componente flusso di dati personalizzato producono dati a velocità non uniformi, vedere Sviluppo di componenti Flusso di dati con più input.

Si applica a