Should I use ToArray/ToList in LINQ queries? – The focused generalist

வணக்கம்,

LINQ இல் விரைவான வார்த்தை

எனவே இன்றைய இடுகையானது மொழி ஒருங்கிணைந்த வினவலின் சுருக்கமான LINQ ஐச் சுற்றி கவனம் செலுத்தப் போகிறது. LINQ பற்றி அறியாதவர்களும், மேலும் அறிய ஆர்வமுள்ளவர்களும், இதைத் தொடர உங்களை அழைக்கிறேன் பக்கம். ஒரு சில வார்த்தைகளில், LINQ என்பது வினவல் திறன்களை நேரடியாக C# மொழியில் ஒருங்கிணைப்பதன் அடிப்படையில் தொழில்நுட்பங்களின் தொகுப்பின் பெயர்.

கடந்த காலத்தில், எனக்கு சில கேள்விகள் இருந்தன, தலைப்பில் எனது அனுபவத்தைப் பகிர்ந்து கொள்ள எனது வலைப்பதிவைப் பயன்படுத்துகிறேன், மேலும் நான் பகிர்ந்து கொள்ளும் அனுபவத்தைப் பயன்படுத்தி உங்களை சிறந்த டெவலப்பர்களாக மாற்றுவேன் என்று நம்புகிறேன். எனவே, மேலும் கவலைப்படாமல், அன்றைய தொழில்நுட்ப கேள்விக்கு முழுக்கு போடுவோம்!

#4: LINQ வினவல்களில் ToArray() / ToList() ஐப் பயன்படுத்த வேண்டுமா?

எனவே, நாம் LINQ ஐப் பயன்படுத்தும் போது, ​​ஒவ்வொரு நீட்டிப்பு முறையும் ஒரு IEnumerable ஐத் தருகிறது, மேலும் அவை ஒன்றாக இணைக்கப்பட்டு, டெவலப்பரான உங்களை, நீங்கள் செய்ய வேண்டியதைச் செய்ய அனுமதிக்கலாம். உதாரணமாக 2018 ஆம் ஆண்டில் 100 புத்தகங்கள். LINQ இன் ஆற்றலை அதன் ஒத்திவைக்கப்பட்ட வெளிப்பாடுகளில் காணலாம். ஒத்திவைக்கப்பட்ட வெளிப்பாடு என்றால் என்ன? நல்ல கேள்வி! உங்கள் LINQ வெளிப்பாடு போன்றவற்றை எழுதும் போது

வேறுவிதமாகச் சொல்லும் வரை உங்கள் வெளிப்பாடு முழுத் தொகுப்பிலும் செல்லாது. திரைக்குப் பின்னால் என்ன நடக்கிறது என்றால், கணக்கீட்டாளரை அடுத்த குறியீட்டிற்கு நகர்த்த வேண்டிய கட்டாயம் வரை, LINQ காத்திருக்கப் போகிறது. அது என்ன பயன் என்று நீங்கள் கேட்கலாம்? வேறு வழியில்லாத வரை பயனுள்ள நினைவகத்தை ஒதுக்க மாட்டீர்கள் என்பதையும், அதை நீங்கள் செய்ய வேண்டியதைச் செய்வதையும் இது குறிக்கிறது.

மீண்டும் நான் LINQ வினவல்களில் ToArray/ToList ஐப் பயன்படுத்த வேண்டுமா. நான் உங்களுக்கு வழங்கக்கூடிய சிறந்த பதில் என்னவென்றால், அது சூழலைப் பொறுத்தது, ஆனால் தேவையற்றதாகக் கருதப்படும்போது நான் அதைப் பயன்படுத்துகிறேன். அதற்கு நான் ஏன் முகம் சுளிக்கிறேன்? ஏனெனில் இது உங்களால் உருவாக்கப்படும் உங்கள் முழு சேகரிப்புக்கும் நினைவகத்தை ஒதுக்குகிறது இணைப்பு வெளிப்பாடு. அந்த முறைகளைப் பயன்படுத்துவதன் மூலம் உங்கள் முழு வெளிப்பாட்டிலும் ஒரு செயல்திறன் வெற்றி பெறலாம் O(n) சூழலைப் பொறுத்து, அந்த இறுதிப்புள்ளிகளில் ஒன்றை நான் பயன்படுத்தினால் இணைப்பு API, நான் பயன்படுத்துவேன் வரிசை முடிந்துவிட்டது பட்டியலிட விளைந்த சேகரிப்பின் மூலம் மீண்டும் மீண்டும் செய்வது போன்ற நோக்கங்களுக்காக. வரிசை உங்கள் குறியீட்டில் செயல்திறன் தாக்கம் சற்று குறைவாக உள்ளது. உங்கள் சேகரிப்பு மிகப் பெரியதாக இருக்கும் போது, ​​அது உங்கள் எல்லா தரவையும் கொண்டிருக்கும் அளவுக்கு பெரிய அளவிலான ஒரு வரிசையை காட்சிக்குப் பின்னால் வளர வேண்டும், பின்னர் கூறிய வரிசையை திரும்பப் பெற வேண்டும். வழக்கில் பட்டியலிடமீண்டும், நாங்கள் ஒரு வரிசையை வளர்த்து வருகிறோம், ஆனால் வரிசை அமைக்கப்பட்டவுடன், அதன் விளைவாக வரும் வரிசையுடன் ஒரு பட்டியல் பொருளைத் துவக்குகிறோம், அதாவது உங்கள் வினவலிலிருந்து XY Gb நினைவகத்தை இரண்டு முறை ஒதுக்குகிறீர்கள்.

நான் ஏற்கனவே குறிப்பிட்டுள்ளபடி, இது உங்கள் சூழலைப் பொறுத்தது. ஒருவேளை நீங்கள் பெறப்பட்ட சேகரிப்பைப் பெற்ற பிறகு, ஒரு குறிப்பிட்ட முயற்சிக்கான பட்டியல் உங்களுக்குத் தேவைப்படும். நான் LINQ ஐப் பயன்படுத்தும்போது, ​​பெரும்பாலான நேரங்களில், எனது API எண்ட்பாயிண்ட்கள் IEnumerableஐத் தருவதை உறுதிசெய்து, எனது குறியீட்டைப் பயன்படுத்துபவர்கள் எதை வேண்டுமானாலும் செய்ய அனுமதிக்கிறேன். எனது முறையிலிருந்து ஒரு அகராதி அல்லது தொகுப்பை நீங்கள் உருவாக்க வேண்டும் என்றால், IEnumerable என்பது சேகரிப்புகள் (பொதுவாக) சுட்டிக்காட்டும் பொதுவான இடைமுகம் என்பதால், திரும்பப் பெறும் மதிப்பு அதைச் செய்ய உங்களை அனுமதிக்கிறது.

உங்கள் நேரத்திற்கு நன்றி,

கெவின் 🙂

Leave a Comment