से 3x धीमी है मेरे पास एक साधारण परीक्षण है जो 5000 बार क्वेरी चलाता है। क्वेरी की LINQ संस्करण पर 3 बार HQL लेता है और कैश की गई Linq संस्करण HQL काNHibernate Linq क्वेरी HQL
HQL कैश्ड संस्करण की तुलना में काफी धीमी है:
session.CreateQuery(String.Format("from Episode where SeriesId='{0}' and SeasonNumber='{1}' and EpisodeNumber='{2}'", seriesId, seasonNumber, episodeNumber))
.SetMaxResults(1)
.SetCacheable(true)
.UniqueResult<Episode>();
Linq:
session.Query<Episode>()
.Where(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber && c.EpisodeNumber == episodeNumber)
.Cacheable()
.FirstOrDefault();
परिणाम
HQL: Cached: less than a second No-Cache: 5 seconds LINQ: Cached: 8 seconds No-Cache: 15 seconds
मैं बस यह सुनिश्चित करना चाहता हूं कि मुझे अपेक्षित ओवरहेड का अनुभव हो रहा है और ऐसा कुछ नहीं जो मैं गलत कर रहा हूं।
यदि उस सिर पर है और वहां बहुत कुछ नहीं है, तो क्या आप शायद एक मध्यम जमीन का सुझाव दे सकते हैं, जिसके लिए कम स्ट्रिंग की आवश्यकता होगी लेकिन बेहतर प्रदर्शन प्रदान किया जाएगा?
नोट: धाराप्रवाह NHibernate .Cache(c => c.UseQueryCache().UseSecondLevelCache().UseMinimalPuts().ProviderClass<HashtableCacheProvider>())
क्या सभी 5000 पुनरावृत्तियों के लिए linq test 'बिल्कुल' से उत्पन्न एसक्यूएल कथन है? – Rippo
मुझे यह SQL कथन नहीं लगता है, क्योंकि कैश किए गए संस्करण जो डेटाबेस को भी हिट नहीं करते हैं, 1 से कम की तुलना में 8 सेकंड है। दोनों मामलों में डेटाबेस केवल एक बार मारा जाता है। –
क्षमा करें कि मेरा मुद्दा होना चाहिए था, क्या आप वाकई डेटाबेस को linq संस्करण के लिए हिट करते हैं? – Rippo