2016-04-24 8 views
6

मैं जल्द ही xamarin पर काम करना शुरू कर दूंगा और एंड्रॉइड स्टूडियो के जावा से सी # तक बहुत सारे कोड स्थानांतरित कर दूंगा।डेटा स्रोत से डेटा पुनर्प्राप्त करने के लिए वास्तव में लिनक कोड कैसे निष्पादित करता है?

जावा में मैं, जो तर्क की स्थिति आदि दिया जाता है एक कस्टम कक्षाओं का उपयोग कर रहा उन्हें SQL कथन में बदलने और उसके बाद परियोजना के मॉडल में वस्तुओं के लिए परिणाम लोड करता है

क्या मैं को लेकर अनिश्चित हूं मौसम LINQ एक है ऐसे डेटा को फ़िल्टर करने के लिए बेहतर विकल्प।

उदाहरण वर्तमान में क्या होगा के लिए इन पंक्तियों

List<Customer> customers = (new CustomerDAO()).get_all() 

या अगर मैं एक शर्त है

List<Customer> customers = (new CustomerDAO()).get(new Condition(CustomerDAO.Code, equals, "code1") 

अब हम मान मैं सी # करने के लिए कक्षाओं में स्थानांतरित कर दिए गए हैं तथा मैं करना चाहते हैं साथ somethng है दूसरे मामले के समान somethng करो।

तो मैं शायद की तर्ज पर कुछ लिखेंगे:

var customers = from customer 
    in (new CustomerDAO()).get_all() 
    where customer.code.equals("code1") 
    select customer 

मुझे पता है कि क्वेरी केवल जब मैं वास्तव में पहुँच ग्राहकों के लिए कोशिश निष्पादित किया जाएगा, लेकिन अगर मैं ग्राहकों के लिए कई पहुंच (हमें है कहें कि मैं बाद में 4 foreach loops का उपयोग करें) get_all विधि 4 बार कहा जाएगा? या परिणाम पहले निष्पादन में संग्रहीत हैं?

यह भी अधिक कुशल है (समय के अनुसार क्योंकि स्मृति के अनुसार यह शायद नहीं है) get_all() विधि को रखने और परिणामों को फ़िल्टर करने के लिए linq का उपयोग करने के लिए? या मेरे मौजूदा सेटअप का उपयोग करें जो प्रभावी रूप से

Select * from Customers where code = 'code1' 

और परिणाम किसी ऑब्जेक्ट को लोड करता है? किसी भी मदद के लिए अग्रिम में

धन्यवाद प्रदान कर सकते हैं

संपादित करें: हाँ मुझे पता है वहाँ sqlite.net जो काफी क्या मेरी daos क्या करता है, लेकिन शायद बेहतर है, और कुछ बिंदु पर मैं शायद परिवर्तित कर देंगे सब मेरी वस्तुओं इसका इस्तेमाल करने की, मैं सिर्फ अगर मैं ग्राहकों के लिए कई पहुंच है

+0

आप किस LINQ का जिक्र कर रहे हैं? वस्तुओं के लिए LINQ? LINQ से ईएफ? LINQ से एसक्यूएल? –

+0

हां, दाओ सूची Cruces

उत्तर

4

जानने के लिए पता करने की जरूरत get_all विधि 4 कहा जाता हो जाएगा (हम कहते हैं कि मैं 4 foreach बाद में लूप का उपयोग हैं) बार? या परिणाम पहले निष्पादन में संग्रहीत हैं?

हर बार जब आप प्रगणक गणना (अपने उदाहरण में foreach का प्रयोग करके), क्वेरी को पुन: निष्पादित, जब तक आप materialized परिणाम कहीं दुकान। उदाहरण के लिए, पहली क्वेरी पर यदि आप ऐसा चाहते हैं:

var customerSource = new CustomerDAO(); 
List<Customer> customerSource.Where(customer => customer.Code.Equals("code1")).ToList(); 

तो अब आप के साथ काम करेंगे एक में स्मृति List<Customer> फिर से क्वेरी को क्रियान्वित करने के बिना।

इसके विपरीत, यदि हर बार जब आप ऐसा चाहते हैं:

var filteredCustomers = customerSource.Where(customer => customer.Code.Equals("code1")) 
foreach (var customer in filteredCustomers) 
{ 
    // Do stuff 
} 

फिर प्रत्येक गणना के लिए तुमने कहा क्वेरी फिर से exeucting हो जाएगा।

यह भी अधिक कुशल (समय बुद्धिमान क्योंकि स्मृति बुद्धिमान शायद नहीं है, यह) बस get_all() विधि और उपयोग LINQ रखने के लिए फिल्टर करने के लिए परिणाम है? या मेरे मौजूदा सेटअप का उपयोग करें जो प्रभावी रूप से

वास्तव में आपके उपयोग-मामले पर निर्भर करता है। आइए कल्पना करें कि आप LINQ से EF का उपयोग कर रहे थे, और ग्राहक तालिका में दस लाख पंक्तियां हैं, क्या आप वास्तव में इन सभी को स्मृति में लाने और डेटा के सबसेट का उपयोग करने के लिए उन्हें फ़िल्टर करना चाहते हैं? यह आमतौर पर पूर्ण फ़िल्टर की गई क्वेरी के लिए बेहतर होगा।

+1

बनाता है तो यह या तो परिणाम की आवश्यकता से पहले एक बार प्रोसेस करना है, या मुझे हर बार इसे करने की ज़रूरत है, अनुमान है कि मुझे मेमोरी उपयोग पर प्रदर्शन के बीच चयन करना होगा, उत्तर – Cruces

+0

@Cruces के उत्तर के लिए धन्यवाद यह उतना आसान और सरल नहीं है - जब तक कि आप कौन से डेटाबेस से अनजान न हों। यदि आपके पास 64 मिलियन ग्राहक हैं और केबी नाम देखते हैं और सर्वर में तालिका के नाम पर एक अनुक्रमणिका है, तो यह भी सरणी के साथ चलने से डेटाबेस सर्वर से पूछने के लिए तेज़ी से हो सकता है। मेमोरी डेटाबेस में अपना खुद का कार्यान्वयन करना एक बहुत ही अलग जानवर है जो सिर्फ LINQ से ऑब्जेक्ट्स को मेमोरी संग्रह में चलाता है। इस तरह ट्रेडऑफ उतना छोटा नहीं है जितना आप इसे बनाते हैं। शीर्ष पर, ग्राहकों को अपडेट के बारे में क्या? आप उन्हें पुनः लोड कैसे करते हैं? ;) – TomTom

+0

नहीं, मैं उन बड़े डेटाबेस के साथ काम नहीं कर रहा हूं, अधिकांश तालिकाओं में 400k से अधिक प्रविष्टियां नहीं हैं, लेकिन मुझे आपकी बात दिखाई देती है, मैं आमतौर पर पेज डेटा करता हूं जब बहुत सारी पंक्तियां होती हैं। मैं बस घूम रहा था कि प्रभाव क्या होगा जब मुझे किसी ऐसे चीज़ से खोजना पड़ेगा जिसका आकार मुझे पता है (उदाहरण के लिए मेरे पोस्ट कोड टेबल में लगभग 100 प्रविष्टियां हैं और शायद 200 से अधिक तक नहीं पहुंचेंगी)। मैं आम तौर पर इस तरह के डेटा के प्रोटोटाइप के साथ काम करता हूं, अगर मैं स्पॉट पर उन्हें लोड करना बेहतर होता तो मैं घूम रहा था, क्योंकि प्रोटोटाइप पैटर्न में कुछ समस्याएं भी थीं। – Cruces

संबंधित मुद्दे

 संबंधित मुद्दे