PipelineComponent.IsInputReady(Int32[], Boolean[]) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Bestimmt, welche der an eine Komponente angeschlossenen Eingaben auf weitere Daten warten und welche genügend Daten zur Verarbeitung haben und blockiert sind.
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())
Parameter
- inputIDs
- Int32[]
Ein Array der IDs der Eingänge, die an die Komponente angeschlossen sind.
- canProcess
- Boolean[]
Ein Array von booleschen Werten, die angeben, ob jede Eingabe auf weitere Daten wartet (wahr) oder blockiert wird (falsch), wird durch Referenz weitergegeben.
Beispiele
Im folgenden Beispiel zeigt die Implementierung der Methode IsInputReady an, dass eine Eingabe darauf wartet, weitere Daten zu erhalten, wenn folgende Bedingungen erfüllt sind:
Für die Eingabe (
!inputEOR) sind weitere Upstream-Daten verfügbar.Die Komponente verfügt derzeit nicht über Daten, die für die Eingabe in den Puffern verarbeitet werden können, die die Komponente bereits erhalten hat (
inputBuffers[inputIndex].CurrentRow() == null).
Wenn eine Eingabe darauf wartet, weitere Daten zu empfangen, zeigt die Datenflusskomponente dies an, indem sie den true Wert des Elements im Array canProcess setzt, das diesem Eingabe entspricht.
Umgekehrt, wenn die Komponente noch Daten zur Verarbeitung der Eingabe hat, pausiert das Beispiel die Verarbeitung der Eingabe. Das Beispiel tut dies, indem false der Wert des Elements im canProcess Array, das diesem Eingabe entspricht, gesetzt wird.
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];
}
}
Das vorherige Beispiel verwendet das Boolesche inputEOR Array, um anzuzeigen, ob für jede Eingabe weitere Upstream-Daten verfügbar sind.
EOR Im Namen des Arrays steht "Ende der Zeilenmenge" und bezieht sich auf die EndOfRowset Eigenschaft von Datenflusspuffern. In einem Teil des Beispiels, der hier nicht enthalten ist, prüft die Methode ProcessInput den Wert der Eigenschaft EndOfRowset für jeden erhaltenen Datenpuffer. Wenn ein Wert von true anzeigt, dass für eine Eingabe keine weiteren Upstream-Daten verfügbar sind, setzt das Beispiel den Wert von inputEOR auf für true diese Eingabe. Diese Implementierung der IsInputReady Methode setzt den entsprechenden Wert im canProcess Array auf für false eine Eingabe, wenn der Wert von inputEOR anzeigt, dass keine weiteren Upstream-Daten für die Eingabe verfügbar sind.
Hinweise
Wenn Sie den Wert der Eigenschaft Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure auf true in der DtsPipelineComponentAttributeMethode setzen, müssen Sie auch eine Implementierung für die Methode IsInputReady bereitstellen.
Die Datenfluss-Engine ruft die Methode IsInputReady auf, um zu bestimmen, welche Eingaben darauf warten, weitere Daten zu empfangen. In Ihrer Implementierung dieser Methode setzen Sie den Status jeder Komponenten-Eingabe im boolesche canProcess Array. (Die Eingänge werden durch ihre ID-Werte im Array inputIDs identifiziert.) Wenn man den Wert einer Eingabe true im canProcess Array auf setzt, ruft die Datenfluss-Engine die ProcessInput Methode der Komponente auf und liefert mehr Daten für die angegebene Eingabe.
Obwohl mehr Upstream-Daten verfügbar sind, muss der Wert mindestens eines Eingangs immer im Array oder in den canProcess Verarbeitungsstopps liegentrue.
Für weitere Informationen zum Umgang mit übermäßigem Speicherverbrauch, wenn die Eingaben einer benutzerdefinierten Datenfluss-Komponente Daten mit ungleichmäßigen Raten erzeugen, siehe Entwicklung von Datenfluss Components with Multiple Inputs.