Bagikan melalui


PipelineComponent.IsInputReady(Int32[], Boolean[]) Metode

Definisi

Menentukan input mana yang dilampirkan ke komponen yang menunggu lebih banyak data, dan yang memiliki cukup data untuk diproses dan diblokir.

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[]

Array ID input yang melekat pada komponen.

canProcess
Boolean[]

Array nilai Boolean yang menunjukkan apakah setiap input menunggu lebih banyak data (benar), atau diblokir (salah), diteruskan oleh referensi.

Contoh

Dalam contoh berikut, implementasi IsInputReady metode menunjukkan bahwa input menunggu untuk menerima lebih banyak data ketika kondisi berikut benar:

  • Lebih banyak data hulu tersedia untuk input (!inputEOR).

  • Komponen saat ini tidak memiliki data yang tersedia untuk diproses untuk input dalam buffer yang telah diterima komponen (inputBuffers[inputIndex].CurrentRow() == null).

Jika input menunggu untuk menerima lebih banyak data, komponen aliran data menunjukkan ini dengan mengatur ke true nilai elemen dalam array yang sesuai dengan input tersebut canProcess .

Sebaliknya, ketika komponen masih memiliki data yang tersedia untuk diproses untuk input, contoh menangguhkan pemrosesan input. Contoh melakukan ini dengan mengatur ke false nilai elemen dalam array yang sesuai dengan input tersebut canProcess .

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];  
    }  
}  

Contoh sebelumnya menggunakan array Boolean inputEOR untuk menunjukkan apakah lebih banyak data hulu tersedia untuk setiap input. EOR dalam nama array mewakili "akhir set baris" dan mengacu pada EndOfRowset properti buffer aliran data. Dalam sebagian contoh yang tidak disertakan di sini, ProcessInput metode memeriksa nilai EndOfRowset properti untuk setiap buffer data yang diterimanya. Ketika nilai true menunjukkan bahwa tidak ada lagi data hulu yang tersedia untuk input, contoh menetapkan nilai inputEOR ke true untuk input tersebut. Implementasi IsInputReady metode ini menetapkan nilai yang sesuai dalam canProcess array ke false untuk input ketika nilai inputEOR menunjukkan bahwa tidak ada lagi data upstream yang tersedia untuk input.

Keterangan

Ketika Anda menetapkan nilai Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure properti ke true di DtsPipelineComponentAttribute, Anda juga harus memberikan implementasi untuk metode .IsInputReady

Mesin aliran data memanggil IsInputReady metode untuk menentukan input mana yang menunggu untuk menerima lebih banyak data. Dalam implementasi metode ini, Anda menetapkan status setiap input komponen dalam array Boolean canProcess . (Input diidentifikasi oleh nilai ID mereka dalam inputIDs array.) Saat Anda mengatur nilai input ke true dalam canProcess array, mesin aliran data memanggil metode komponen dan menyediakan lebih banyak ProcessInput data untuk input yang ditentukan.

Meskipun lebih banyak data hulu tersedia, nilai setidaknya satu input harus selalu berada true dalam canProcess array, atau pemrosesan berhenti.

Untuk informasi selengkapnya tentang penanganan penggunaan memori yang berlebihan jika input komponen aliran data kustom menghasilkan data pada tingkat yang tidak merata, lihat Mengembangkan Komponen Aliran Data dengan Beberapa Input.

Berlaku untuk