2 पॉइंट द्वारा GN⁺ 2024-10-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें

.NET 9.0 LINQ परफ़ॉर्मेंस सुधार

  • Span<T> का उपयोग करके iteration

    • .NET 9.0 में LINQ की परफ़ॉर्मेंस में बड़ा सुधार हुआ है.
    • Span<T> का उपयोग करके array पर iterate करने से परफ़ॉर्मेंस बेहतर होती है.
    • TryGetSpan() मेथड का उपयोग करके array या list को ReadOnlySpan<T> में बदलकर iteration की गति बढ़ाई जाती है.
  • TryGetSpan() मेथड

    • TryGetSpan() array या list को ReadOnlySpan<T> में बदलकर iteration परफ़ॉर्मेंस को बेहतर बनाता है.
    • कोड optimization बहुत सूक्ष्म स्तर पर किया गया है, और यह performance experts द्वारा लिखा गया कोड है.
    • list का internal array बदल सकता है, इसलिए CollectionsMarshal.AsSpan() का उपयोग करते समय सावधानी की आवश्यकता है.
  • TryGetSpan() callers

    • TryGetSpan() को कॉल करने वाले मेथड्स का विश्लेषण करने पर पता चलता है कि कई Enumerable मेथड्स array या list होने पर span का उपयोग करने की कोशिश करते हैं.
    • yield का उपयोग करने वाले operations इस optimization का उपयोग नहीं कर सकते.
  • विशेषीकृत iterators

    • LINQ के internal IIListProvider और IPartition आधारित iterator classes को एकीकृत करके परफ़ॉर्मेंस बेहतर की गई है.
    • विशेष LINQ call chains को पहचानकर उन्हें कुशलतापूर्वक संभालने वाले specialized iterators बनाए जाते हैं.
  • Iterator<T> और derived classes का implementation

    • Iterator<T> एक abstract class है, और derived classes केवल आवश्यक मेथड्स को override करती हैं.
    • ListWhereSelectIterator<TSource, TResult> Where(...).Select(...) chain को एक single iterator के रूप में संभालकर परफ़ॉर्मेंस बेहतर करता है.
  • IListSkipTakeIterator<TSource> case study

    • MoveNext() मेथड अनावश्यक iteration से बचता है, और केवल _minIndexInclusive तथा _maxIndexInclusive रेंज के भीतर के elements को process करता है.

GN⁺ का सार

  • .NET 9.0 में LINQ की परफ़ॉर्मेंस में बड़ा सुधार हुआ है, खासकर Span<T> और TryGetSpan() का उपयोग करके iteration परफ़ॉर्मेंस बढ़ाई गई है.
  • LINQ की internal structure को optimize किया गया है, जिससे खास call chains को पहचानकर उन्हें कुशलतापूर्वक संभालने वाले specialized iterators बनाए जाते हैं.
  • ये सुधार code की परफ़ॉर्मेंस बढ़ाने में मदद करते हैं, और आप नवीनतम .NET version पर migrate करके इन लाभों का उपयोग कर सकते हैं.
  • LINQ जैसी सुविधाएँ देने वाली दूसरी library System.Linq.Async भी उपलब्ध है.

1 टिप्पणियां

 
GN⁺ 2024-10-20
Hacker News राय
  • LINQ का सबसे उपयोगी हिस्सा IEnumerable extension है। यह C# को functional style में लिखना संभव बनाता है

    • Haskell सीखने के बाद LINQ की अवधारणा समझ में आई
    • अगर इसे अनुभवहीन टीम इस्तेमाल करे, तो कोड जटिल और धीमा हो सकता है
  • यह समझना मुश्किल है कि dotnet टीम tools में ज़्यादा resources क्यों निवेश नहीं करती

    • documentation generation, बेहतर unit testing, और source code accessibility में सुधार की ज़रूरत का उल्लेख
    • NuGet के ज़्यादातर packages में documentation की कमी है
  • LINQ performance improvements का फोकस Microsoft के अपने List<T> implementation के performance improvement पर है

    • lambda allocation और compile time कम करने में निवेश की ज़रूरत पर ज़ोर
    • LINQ variables के लिए wildcard support की ज़रूरत का उल्लेख
  • LINQ भाषाओं के बीच प्रमुख differentiating factors में से एक है

    • C# 3 के बाद इसमें लगभग कोई बदलाव नहीं हुआ
    • यह सोचना दुर्भाग्यपूर्ण है कि LINQ सिर्फ list iteration के लिए ही उपयोगी है
  • C# जितना ज़्यादा F# से उधार लेता है, उतना अच्छा लगता है

    • उम्मीद है कि discriminated unions C# में आएंगे
  • दूसरी भाषाएँ इस्तेमाल करते समय LINQ की कमी महसूस होती है

    • standard library में LINQ होना एक बड़ा फ़ायदा है
  • एक बार LINQ इस्तेमाल करना शुरू कर दें, तो कुछ और इस्तेमाल करना मुश्किल हो जाता है

  • व्यापक dotnet web development learning materials ढूँढना कठिन है

    • ज़्यादातर सामग्री या तो बहुत बुनियादी है या कम गुणवत्ता की है
  • आधुनिक .NET code में comments बहुत ज़्यादा जटिल हैं

    • बेहतर तरीके की ज़रूरत है
  • .NET 9 में performance improvements से जुड़ा एक section है

    • ऐसे chains में और optimization संभव होने का उल्लेख जो किसी specific method पर खत्म होते हैं
  • OrderBy(criteria).First() को Min(criteria) में optimize किया जा सकता है

    • यह सकारात्मक है कि library inefficient patterns को पहचानकर उन्हें ठीक करती है