में प्रदर्शन के लिए मेरे वर्तमान एप्लिकेशन में मैं उपयोगकर्ता को प्रदर्शित करने के लिए काफी लंबी तालिका उत्पन्न कर रहा हूं। मुझे इसके साथ कुछ गंभीर प्रदर्शन समस्याएं दिखाई दे रही हैं, जिन्हें मैंने @ HTML.DisplayFor के उपयोग के लिए ट्रैक किया है, और मुझे पूरा यकीन नहीं है कि क्यों।धीमी प्रदर्शन ASP.NET कोर एमवीसी
संपादित करें: मैंने कोड नमूना को अधिक संक्षिप्त और पुनरुत्पादित सेटअप के साथ बदल दिया है।
इस मुद्दे को अलग करने के लिए, मैंने दृश्य स्टूडियो में सभी डिफ़ॉल्ट सेटिंग्स का उपयोग करके एक नया एएसपीनेट कोर एमवीसी प्रोजेक्ट बनाया है, बिना प्रमाणीकरण के।
public IActionResult TestThings()
{
var list = new List<TestingViewModel>();
for(var i = 0; i < 1000; i++)
list.Add(new TestingViewModel {Id = i, TextValue1 = "Test", TextValue2 = "Test2"});
return View(list);
}
दृश्य डेटा प्रदर्शित करने के लिए न्यूनतम संभव है:
public class TestingViewModel
{
public int Id { get; set; }
public string TextValue1 { get; set; }
public string TextValue2 { get; set; }
}
तो देखने के लिए पारित करने के लिए एक नियंत्रक जो डेटा के साथ दृश्य मॉडल भरता कहा: मैं इस तरह के रूप में एक दृश्य मॉडल बनाया :
@model List<DisplayForTest.ViewModels.TestingViewModel>
@foreach (var item in Model)
{
@Html.DisplayFor(m => item.Id)
@Html.DisplayFor(m => item.TextValue1)
@Html.DisplayFor(m => item.TextValue2)
}
इस कोड को चलाने पर, इसे चलाने के लिए एक सेकंड से अधिक समय लगता है! अपराधी डिस्प्लेफायर है। यदि मैं दृश्य को निम्नानुसार बदलता हूं:
@model List<DisplayForTest.ViewModels.TestingViewModel>
@foreach (var item in Model)
{
@item.Id
@item.TextValue1
@item.TextValue2
}
यह 13ms में प्रस्तुत करता है। यह स्पष्ट है कि डिस्प्लेफ़ोर प्रतिपादन के लिए बहुत अधिक समय जोड़ रहा है ... मेरे पीसी पर प्रति कॉल लगभग 0.4ms है। हालांकि यह अलगाव में बुरा नहीं है, यह सूचियों या अन्य चीजों के लिए यह एक बहुत खराब विकल्प बनाता है।
DisplayFor
वास्तव में बस इतना धीमा है? या क्या मैं इसे गलत तरीके से उपयोग कर रहा हूं?
'DisplayFor' आपके ऑब्जेक्ट में प्रत्येक प्रॉपर्टी तक पहुंचने के लिए प्रतिबिंब का उपयोग करता है, यह एक ईएफ आलसी लोड को ट्रिगर कर सकता है यदि यह नेविगेशन प्रॉपर्टी है। यह हो रहा है कि क्या हो रहा है। – Dai
एक और कारण है कि आपको अपने विचारों में दृढ़ता मॉडल का उपयोग क्यों नहीं करना चाहिए, इसके बजाय दृश्य मॉडल का उपयोग करें। हालांकि हम नहीं जानते कि ओपी क्या उपयोग करता है, ईएफसीओआर में आलसी नहीं है लोडिंग अभी तक कार्यान्वित किया गया है, केवल EF6 – Tseng
मैं इसके लिए EFCore का उपयोग कर रहा हूं।मैंने इसे तुरंत एक दृश्य मॉडल में परिवर्तित कर दिया, और 'सदस्यों' के साथ डेटा का चयन किया। चयन करें (एस => नए सदस्य लिस्ट व्यूमोडेल {आईडी = एसआईआईडी})। ToList(); ', लेकिन ऐसा लगता है कि समान प्रदर्शन समस्याएं हैं। – Doddler