सी #/.NET 3.5 का उपयोग करना।SqlDataAdapter.Fill - असीमित दृष्टिकोण
वर्तमान में मैं 2 डेटाटेबल्स को दूसरे के बाद SqlDataAdapter.Fill() का उपयोग कर रहा हूं।
मैं इन दोनों डेटाटेबल्स को समानांतर में एक साथ जोड़ना चाहता हूं, साथ ही साथ प्रत्येक एक को अतुल्यकालिक रूप से कर सकता हूं। हालांकि, फिल() विधि का कोई असीमित संस्करण नहीं है - यानी BeginFill() बहुत अच्छा होगा!
- SqlCommand1.BeginExecuteReader // 1 क्वेरी, DataTable1 के लिए
- SqlCommand2.BeginExecuteReader // 2 क्वेरी, DataTable2
- SqlCommand1.EndExecuteReader के लिए:
एक दृष्टिकोण मैं कोशिश की है (छद्म) है
- SqlCommand2.EndExecuteReader
- DataTable1.Load (DataReader1)
- DataTable2.Load (DataReader2)
हालांकि, DataTable.Load() एक लंबा समय लगता:
यह 3 सेकंड लेता है चरण 1 करने के लिए कदम 4
चरण 5 तो 22 सेकंड लेता है।
चरण 6 में 17 सेकंड लगते हैं।
तो, चरण 5 और 6 के लिए 39 सेकंड संयुक्त।
अंत परिणाम यह है कि यह मुझे 2 SqlDataAdapter.Fills करने पर कोई लाभ नहीं देता है, एक के बाद एक। मैं नेट परिणाम चाहता हूं कि पूरी प्रक्रिया केवल सबसे लंबी क्वेरी (या जितनी संभव हो सके उतनी करीब) के रूप में लेती है।
डेटाटेबल भरने के लिए वास्तव में एक असीमित दृष्टिकोण के साथ समाप्त होने के लिए अनुशंसित तरीकों की तलाश करना।
या क्या मैं इसे स्वयं प्रबंधित करता हूं और 2 अलग-अलग धागे रोल करता हूं, प्रत्येक डेटाटेबल भरता है?
तो एक बार मैं हर एक अप पंक्तिबद्ध है, मैं दोनों जब तक कैसे इंतजार कर सकते हैं पूरा कर लिया है? मुझे जारी रखने से पहले दोनों टेबलों की आवश्यकता होती है और उन्हें – AdaTheDev
संसाधित करता है, यदि मैंने मदद की है तो मैंने अपने उत्तर में प्रतीक्षा अवधारणा को जोड़ा है। –
@AdaTheDev, आप AutoResetEvents का उपयोग करेंगे जो काम पूरा होने के बाद ट्रिगर करेगा (प्रत्येक अलग थ्रेड के अंदर)। @Neils उत्तर देखें क्योंकि उसने पहले ही एक उदाहरण प्रदान किया है। – James