2009-11-10 24 views
5

मेरे हालिया प्रोजेक्ट में जो Asp.net एमवीसी 2 का उपयोग कर रहा है, हमने पाया कि डिस्प्लेफ़ोर में प्रदर्शन समस्या है। मुझे यकीन नहीं है कि यह वास्तविक मुद्दा है या मुझे कुछ याद आया?Asp.net एमवीसी 2 प्रदर्शन प्रदर्शन प्रदर्शन समस्या?

मुझे आशा है कि कुछ एएसपीनेट एमवीसी गुरु मुझे यह समझा सकते हैं। :)

मॉडल।

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string EmailAddress { get; set; } 

    public static IEnumerable<Customer> GetCustomers() 
    {    
     for (int i = 0; i < 1000; i++) 
     { 
      var cust = new Customer() 
      { 
       CustomerId = i + 1, 
       Name = "Name - " + (i + 1), 
       Address = "Somewhere in the Earth...", 
       EmailAddress = "customerABC" 
      }; 

      yield return cust; 
     } 
    } 
} 

नियंत्रक

public ActionResult V1() 
    {    
     return View(Customer.GetCustomers()); 
    } 

    public ActionResult V2() 
    { 
     return View(Customer.GetCustomers()); 
    } 

V1

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Customer>>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    V1 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>V1</h2> 
    <table> 
    <%foreach (var cust in this.Model) 
     {%> 
     <%= Html.DisplayFor(m => cust) %> 
     <%} %> 
    </table> 
</asp:Content> 

और खाका

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Customer>" %> 
<tr> 
    <td><%= this.Model.CustomerId %></td> 
    <td><%= this.Model.Name %></td> 
    <td><%= this.Model.Address %></td> 
    <td><%= this.Model.EmailAddress %></td>  
</tr> 

V2 (कोई प्रदर्शन मुद्दा)

है (प्रदर्शन मुद्दा है)
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Customer>>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    V2 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <h2>V2</h2> 
    <table> 
    <%foreach (var cust in this.Model) 
     {%> 
     <tr> 
      <td><%= cust.CustomerId%></td> 
      <td><%= cust.Name%></td> 
      <td><%= cust.Address%></td> 
      <td><%= cust.EmailAddress%></td>  
     </tr> 
     <%} %> 
     </table> 
</asp:Content> 

मैं V1 और V2 के बीच प्रदर्शन अंतर को आसानी से देख सकता हूं।

EDIT: जब मैं अपने स्थानीय आईआईएस 7 (रिलीज संस्करण के साथ) पर तैनात करता हूं और यह (वी 1) बहुत तेज़ हो जाता है। मुद्दा हल हो गया है, लेकिन मैं अभी भी कारण जानना चाहता हूं। :)

धन्यवाद,
सो मो

उत्तर

12

कैशिंग केवल रिलीज़ मोड में सक्षम है। यदि आप डीबग मोड में एप्लिकेशन चलाते हैं, तो डिस्क एक्सेस के कारण आप प्रदर्शन हिट देख सकते हैं।

यह भी देखें: http://codeclimber.net.nz/archive/2009/04/22/how-to-improve-htmlhelper.renderpartial-performances-donrsquot-run-in-debug-mode.aspx

+0

धन्यवाद! मैंने डीबग को झूठ में बदल दिया और प्रदर्शन उस पर वापस चला गया जिसकी मुझे उम्मीद थी ... – bytebender

0

मुद्दा यह है कि DisplayFor() एक लैम्ब्डा अभिव्यक्ति जो संकलित और रनटाइम पर निष्पादित किया जाता है का उपयोग करता है।

इसलिए, वी 1 में प्रदर्शन अंतर को इस "मध्यवर्ती" संकलन चरण के लिए जिम्मेदार ठहराया जा सकता है।

वी 2 केवल एक संपत्ति पहुंच है जिसे किसी भी संकलन की आवश्यकता नहीं है।

मैं यहाँ एक अनुमान ले रहा हूँ, लेकिन मुझे लगता है कि IIS7 बहुत चालाक भविष्य पुनः उपयोग के लिए चारों ओर देखने के एक कैश की गई प्रतिलिपि (और संकलित लैम्ब्डा भाव) रखने के लिए है, जिसका अर्थ बाद में बार प्रस्तुत करना करने के लिए तुलनीय हो जाएगा आईआईएस 6 में वी 1 6.

+0

धारणा है कि IIS7 महत्वपूर्ण कारक यहाँ है, सही नहीं है। सही जानकारी के लिए लेवी का जवाब देखें। उत्तर देने के बाद – thomasjo

+0

आईआईएस 7 का उल्लेख किया गया था, इसलिए मैं इसे हटा नहीं सकता :( – Codebrain

संबंधित मुद्दे