PipelineComponent.IsInputReady(Int32[], Boolean[]) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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.