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 angefügten Eingaben auf weitere Daten warten und welche Eingaben über ausreichend Daten für die Verarbeitung verfügen und blockiert werden.
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 an die Komponente angefügten Eingaben.
- canProcess
- Boolean[]
Ein Array von booleschen Werten, das angibt, ob jede Eingabe auf weitere Daten (true) wartet oder blockiert (false), übergeben durch Verweis.
Beispiele
Im folgenden Beispiel gibt die Implementierung der IsInputReady-Methode an, dass eine Eingabe auf den Empfang weiterer Daten wartet, wenn die folgenden Voraussetzungen erfüllt sind:
Mehr Upstreamdaten sind für die Eingabe verfügbar (
!inputEOR
).Die Komponente verfügt derzeit nicht über Daten, die für die Eingabe in den Puffern verarbeitet werden können, die die Komponente bereits empfangen hat (
inputBuffers[inputIndex].CurrentRow() == null
).
Wenn eine Eingabe auf den Empfang weiterer Daten wartet, gibt die Datenflusskomponente dieses an, indem der Wert des Elements im canProcess
-Array, das dieser Eingabe entspricht, auf true
festgelegt wird.
Wenn die Komponente hingegen weiterhin verfügbare Daten aufweist, die für die Eingabe verarbeitet können, wird im Beispiel die Verarbeitung der Eingabe angehalten. Hierfür wird im Beispiel der Wert des Elements im canProcess
-Array, das dieser Eingabe entspricht, auf false
festgelegt.
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];
}
}
Im vorangehenden Beispiel wird das boolesche inputEOR
-Array verwendet, um anzugeben, ob für die jeweiligen Eingaben weitere Upstreamdaten verfügbar sind. EOR
im Namen des Arrays steht für "Ende des Rowsets" und bezieht sich auf die EndOfRowset-Eigenschaft von Datenflusspuffern. In einem Teil des Beispiels, der hier nicht enthalten ist, überprüft die ProcessInput-Methode den Wert der EndOfRowset-Eigenschaft für jeden empfangenen Datenpuffer. Wenn ein Wert true
angibt, dass für eine Eingabe keine vorgelagerten Daten verfügbar sind, legt das Beispiel den Wert inputEOR
true
für diese Eingabe fest. Diese Implementierung der IsInputReady Methode legt den entsprechenden Wert im canProcess
Array false
für eine Eingabe fest, wenn der Wert inputEOR
angibt, dass für die Eingabe keine vorgelagerten Daten verfügbar sind.
Hinweise
Wenn Sie den Wert der Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure Eigenschaft auf das DtsPipelineComponentAttributeObjekt festlegen, müssen Sie auch eine Implementierung für die IsInputReady Methode true
bereitstellen.
Das Datenflussmodul ruft die IsInputReady Methode auf, um zu ermitteln, welche Eingaben auf den Empfang weiterer Daten warten. In Ihrer Implementierung dieser Methode legen Sie den Status der eingaben der einzelnen Komponenten im booleschen canProcess
Array fest. (Die Eingaben werden durch ihre ID-Werte im inputIDs
Array identifiziert.) Wenn Sie den Wert einer Eingabe true
in das canProcess
Array festlegen, ruft das Datenflussmodul die Methode der Komponente ProcessInput auf und stellt weitere Daten für die angegebene Eingabe bereit.
Während mehr Upstreamdaten verfügbar sind, muss sich der Wert mindestens einer Eingabe immer true
im canProcess
Array befinden, oder verarbeitungsstopps.
Weitere Informationen zur Behandlung übermäßiger Speichernutzung, wenn die Eingaben einer benutzerdefinierten Datenflusskomponente Daten mit ungleichmäßigen Raten erzeugen, finden Sie unter Entwickeln von Datenfluss Komponenten mit mehreren Eingaben.