मैं इकाई फ्रेमवर्क के साथ एक दिलचस्प प्रदर्शन समस्या में भाग रहा हूं। मैं पहले कोड का उपयोग कर रहा हूँ।इकाई फ्रेमवर्क प्रदर्शन समस्या
एक पुस्तक में कई समीक्षा हो सकती है:
यहाँ मेरी संस्थाओं की संरचना है। एक समीक्षा एक पुस्तक से जुड़ी है। एक समीक्षा में एक या कई टिप्पणियां हो सकती हैं। एक टिप्पणी एक समीक्षा के साथ जुड़ा हुआ है।
public class Book
{
public int BookId { get; set; }
// ...
public ICollection<Review> Reviews { get; set; }
}
public class Review
{
public int ReviewId { get; set; }
public int BookId { get; set; }
public Book Book { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Comment
{
public int CommentId { get; set; }
public int ReviewId { get; set; }
public Review Review { get; set; }
}
मैंने अपने डेटाबेस को बहुत सारे डेटा के साथ पॉप्युलेट किया और उचित इंडेक्स जोड़े।
var bookAndReviews = db.Books.Where(b => b.BookId == id)
.Include(b => b.Reviews)
.FirstOrDefault();
यह विशेष रूप से पुस्तक 10,000 समीक्षा है: मैं केवल एक पुस्तक है कि उस पर 10,000 समीक्षा इस क्वेरी का उपयोग किया गया है प्राप्त करने का प्रयास कर रहा हूँ। इस क्वेरी का प्रदर्शन लगभग 4 सेकंड है। सटीक एक ही क्वेरी (एसक्यूएल प्रोफाइलर के माध्यम से) चलाना वास्तव में किसी भी समय वास्तव में वापस नहीं आता है। मैंने डेटा को पुनर्प्राप्त करने के लिए एक ही क्वेरी और एक SQL डेटा एडाप्टर और कस्टम ऑब्जेक्ट्स का उपयोग किया और यह 500 मिलीसेकंड से कम होता है।
चींटियों प्रदर्शन प्रोफाइलर का उपयोग करते हुए यह समय की थोक में कुछ अलग बातें कर खर्च किया जा रहा है की तरह लग रहा:
बराबर विधि 50 लाख बार बुलाया जा रहा है।
क्या किसी को पता है कि इसे 50 मिलियन बार कॉल करने की आवश्यकता क्यों होगी और मैं इसके प्रदर्शन को कैसे बढ़ा सकता हूं?
क्या आप वास्तव में देखना चाहते थे कि आपके कथन से कौन सी क्वेरी उत्पन्न की जा रही है या क्या आप मानते हैं कि यह इष्टतम क्वेरी है? –
ईएफ प्रोफाइलर को आज़माएं। –
समस्या यह नहीं है कि मैंने कहा है। मैंने सटीक क्वेरी ली है कि ईएफ उत्पन्न कर रहा है और इसे नियमित रूप से ADO.net का उपयोग करके एक SQL डेटा एडाप्टर में उपयोग किया जाता है, वही ऑब्जेक्ट मैन्युअल रूप से लोड करता है। यह एक सेकंड से भी कम समय में चलता है। – Dismissile