PipelineComponent.IsInputReady(Int32[], Boolean[]) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 inputEOR
true
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.