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 connectées à un composant attendent plus de données, lesquelles ont suffisamment 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[]
Un tableau des identifiants des entrées attachées au composant.
- canProcess
- Boolean[]
Un tableau de valeurs booléennes indiquant si chaque entrée attend plus de données (vrai), ou est bloquée (fausse), transmise par référence.
Exemples
Dans l’exemple suivant, l’implémentation de la IsInputReady méthode indique qu’une entrée attend de recevoir plus de données alors que les conditions suivantes sont vraies :
Plus de données en amont sont disponibles pour l’entrée (
!inputEOR).Le composant ne dispose actuellement pas de données disponibles pour traiter les entrées dans les tampons qu’il a déjà reçues (
inputBuffers[inputIndex].CurrentRow() == null).
Si une entrée attend de recevoir plus de données, la composante flux de données l’indique en fixant à true la valeur de l’élément du canProcess tableau correspondant à cette entrée.
Inversement, lorsque le composant dispose encore de données à traiter pour l’entrée, l’exemple suspend le traitement de l’entrée. L’exemple fait cela en fixant à false la valeur de l’élément du canProcess tableau correspondant à 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 booléen inputEOR pour indiquer si plus de données en amont sont disponibles pour chaque entrée.
EOR dans le nom du tableau, cela représente « fin de rowset » et fait référence à la EndOfRowset propriété des tampons de flux de données. Dans une partie de l’exemple qui n’est pas incluse ici, la ProcessInput méthode vérifie la valeur de la EndOfRowset propriété pour chaque tampon de données qu’elle reçoit. Lorsqu’une valeur de true indique qu’il n’y a plus de données en amont disponibles pour une entrée, l’exemple fixe la valeur de inputEOR à true pour cette entrée. Cette implémentation de la IsInputReady méthode fixe la valeur correspondante dans le canProcess tableau à false pour une entrée lorsque la valeur de inputEOR indique qu’il n’y a plus de données en amont disponibles pour l’entrée.
Remarques
Lorsque vous fixez la valeur de la Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure propriété à true dans , DtsPipelineComponentAttributevous devez également fournir une implémentation pour la IsInputReady méthode.
Le moteur de flux de données appelle la IsInputReady méthode pour déterminer quelles entrées attendent de recevoir davantage de données. Dans votre implémentation de cette méthode, vous définissez le statut de chaque entrée du composant dans le tableau booléen canProcess . (Les entrées sont identifiées par leurs valeurs d’identification dans le inputIDs tableau.) Lorsque vous définissez la valeur d’une entrée dans true le canProcess tableau, le moteur de flux de données appelle la méthode du ProcessInput composant et fournit plus de données pour l’entrée spécifiée.
Bien que plus de données en amont soient disponibles, la valeur d’au moins une entrée doit toujours être true dans le canProcess tableau, sinon le traitement s’arrête.
Pour plus d’informations sur la gestion d’une utilisation excessive de la mémoire si les entrées d’un composant personnalisé de data flow produisent des données à des débits irréguliers, voir Developing Data Flow Components with Multiple Inputs.