Partager via


PipelineComponent.IsInputReady(Int32[], Boolean[]) Méthode

Définition

Détermine quelles entrées jointes à un composant attendent davantage de données et lesquelles disposent d'assez de données à traiter et sont bloquées.

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())

Paramètres

inputIDs
Int32[]

Tableau d'ID des entrées jointes au composant.

canProcess
Boolean[]

Tableau de valeurs booléennes qui indiquent si chaque entrée attend davantage de données (true) ou est bloquée (false), passée par référence.

Exemples

Dans l'exemple suivant, l'implémentation de la méthode IsInputReady indique qu'une entrée attend pour recevoir plus de données lorsque les conditions suivantes sont remplies :

  • Plus de données en amont sont disponibles pour l'entrée (!inputEOR).

  • Le composant n'a pas actuellement de données disponibles pour traiter l'entrée dans les mémoires tampon que le composant a déjà reçues (inputBuffers[inputIndex].CurrentRow() == null).

Si une entrée attend pour recevoir plus de données, le composant de flux de données indique cela en définissant à true la valeur de l'élément dans le tableau canProcess qui correspond à cette entrée.

Inversement, lorsque le composant a encore des données disponibles à traiter pour l'entrée, l'exemple interrompt le traitement de l'entrée. L'exemple fait cela en définissant à false la valeur de l'élément dans le tableau canProcess qui correspond à cette entrée.

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'exemple précédent utilise le tableau inputEOR booléen pour indiquer si davantage de données en amont sont disponibles pour chaque entrée. EOR dans le nom du tableau représente « fin d'ensemble de lignes » et fait référence à la propriété EndOfRowset de mémoires tampon de flux de données. Dans une partie de l'exemple qui n'est pas inclus ici, la méthode ProcessInput vérifie la valeur de la propriété EndOfRowset pour chaque mémoire tampon des données qu'elle reçoit. Lorsqu’une valeur indique true qu’il n’y a plus de données en amont disponibles pour une entrée, l’exemple définit la valeur de inputEORtrue cette entrée. Cette implémentation de la IsInputReady méthode définit la valeur correspondante dans le canProcess tableau false pour une entrée lorsque la valeur d’indique inputEOR qu’il n’y a plus de données en amont disponibles pour l’entrée.

Remarques

Lorsque vous définissez la valeur de la Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propriété dans le DtsPipelineComponentAttribute, vous devez également fournir une implémentation pour la IsInputReadytrue méthode.

Le moteur de flux de données appelle la IsInputReady méthode pour déterminer les entrées qui attendent de recevoir plus de données. Dans votre implémentation de cette méthode, vous définissez l’état de chacune des entrées du composant dans le tableau booléen canProcess . (Les entrées sont identifiées par leurs valeurs d’ID dans le inputIDs tableau.) Lorsque vous définissez la valeur d’une entrée true dans le canProcess tableau, le moteur de flux de données appelle la méthode du composant et fournit davantage de ProcessInput données pour l’entrée spécifiée.

Bien que d’autres données en amont soient disponibles, la valeur d’au moins une entrée doit toujours se trouver true dans le canProcess tableau ou les arrêts de traitement.

Pour plus d’informations sur la gestion de l’utilisation excessive de la mémoire si les entrées d’un composant de flux de données personnalisé produisent des données à des taux inégales, consultez Développement de composants Data Flow avec plusieurs entrées.

S’applique à