के साथ अत्यधिक धीमी गति से धीमी गति से मैंने Kendo DataSourceResult ToDataSourceResult(this IQueryable enumerable, DataSourceRequest request);
विस्तार का विस्तार किया है और अब तक 40 मिलियन रिकॉर्ड की तालिका पूछताछ करते समय प्रदर्शन प्रदर्शन कभी नहीं देखा है। 10 क्वेरी मैं एक मानक के रूप में लिखा था लेने के रूप में यह अनुरोध में पारित रूप में ही हैकेंडो एमवीसी ToDataSourceResult बड़े IQueryable
यह मेरा पढ़ने कार्रवाई है:।
public ActionResult ReadAll([DataSourceRequest] DataSourceRequest
{
var startTimer = DateTime.Now;
var context = Helpers.EFTools.GetCADataContext();
Debug.WriteLine(string.Format("{0} : Got Context", DateTime.Now - startTimer));
var events = from e in context.Events
select
new Models.Event()
{
Id = e.Id,
DateTime = e.EventDateTime,
HostId = e.Door.HostId,
SiteId = e.Door.Host.SiteId,
UserId = (int)e.UserId,
UserName = e.User.FirstName + " " + e.User.Surname,
DoorId = e.DoorId,
Door = e.Door.Name,
Description = e.Description,
SubDescription = e.SubDescription
};
Debug.WriteLine(string.Format("{0} : Built Query", DateTime.Now - startTimer));
var tenRecods = events.OrderByDescending(i => i.DateTime).Take(10).ToList();
Debug.WriteLine(string.Format("{0} : Taken 10", DateTime.Now - startTimer));
var result = events.ToDataSourceResult(request);
Debug.WriteLine(string.Format("{0} : Datasource Result", DateTime.Now - startTimer));
return this.Json(result);
}
डीबग से उत्पादन:
00:00:00.1316569 : Got Context
00:00:00.1332584 : Built Query
00:00:00.2407656 : Taken 10
00:00:21.5013946 : Datasource Result
हालांकि कभी-कभी क्वेरी का समय समाप्त हो जाता है। का उपयोग dbMonitor मैं दोनों querys पर कब्जा कर लिया, पहली मैनुअल 10 ले:
"Project1".id,
"Project1"."C1",
"Project1".hostid,
"Project1".siteid,
"Project1".userid,
"Project1"."C2",
"Project1".doorid,
"Project1"."name",
"Project1".description,
"Project1".subdescription
FROM (SELECT
"Extent1".id,
"Extent1".userid,
"Extent1".description,
"Extent1".subdescription,
"Extent1".doorid,
"Extent2"."name",
"Extent2".hostid,
"Extent3".siteid,
CAST("Extent1".eventdatetime AS timestamp) AS "C1",
"Extent4".firstname || ' ' || "Extent4".surname AS "C2"
FROM public.events AS "Extent1"
INNER JOIN public.doors AS "Extent2" ON "Extent1".doorid = "Extent2".id
INNER JOIN public.hosts AS "Extent3" ON "Extent2".hostid = "Extent3".id
INNER JOIN public.users AS "Extent4" ON "Extent1".userid = "Extent4".id
) AS "Project1"
ORDER BY "Project1"."C1" DESC
LIMIT 10
और ToDataSourceRequest क्वेरी:
request.Aggregates Count = 0
request.Filters Count = 0
request.Groups Count = 0
request.Page 1
request.PageSize 10
request.Sorts Count = 1
यह वह जगह है:
SELECT
"GroupBy1"."A1" AS "C1"
FROM (SELECT Count(1) AS "A1"
FROM public.events AS "Extent1"
INNER JOIN public.doors AS "Extent2" ON "Extent1".doorid = "Extent2".id
) AS "GroupBy1"
यह DataSourceRequest request
पैरामीटर में पारित कर दिया है var result = events.ToDataSourceResult(request);
DataSourceRequest
का उपयोग करके अधिक कुशल और तेज़ तरीके से IQueryable IQueryable से DataSourceResult
कैसे प्राप्त कर सकता हूं?
जैसा कि दूसरे SQL से देखा जा सकता है, आपके पास DataSourceRequest में पेजिंग सक्षम नहीं है। पेजिंग सक्षम करने में बहुत मदद मिलती है। –
मैंने अनुरोध पैरामीटर को शामिल करने के लिए अपना उत्तर अपडेट कर दिया है। 'Var result = events.ToDataSourceResult (अनुरोध) से परिणाम;' केवल 10 आइटम शामिल हैं। मैंने सोचा कि यह पेजिंग था, अगर नहीं तो मैं इसे कैसे सक्षम करूं? –
आपके अनुरोध में वास्तव में पेजिंग जानकारी है। हालांकि आप जो SQL कथन दिखा रहे हैं वह नहीं है। मुझे लगता है कि यह एक अलग एसक्यूएल कथन है। आप ToDataSourceResult को छोड़ सकते हैं और कस्टम बाध्यकारी को यहां दिखाए गए अनुसार लागू कर सकते हैं: http://docs.kendoui.com/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/custom- बाइंडिंग –