2013-03-22 10 views
9

चलिए इन कोडों को पढ़ते हैं, मैंने विंडोज फोन 8 प्रोजेक्ट में दो समान उपयोगकर्ता नियंत्रणों को परिभाषित किया है और मैं वास्तव में उनमें से कौन सा बेहतर होना चाहता हूं। मैंने प्रोफाइलिंग की जांच की है, ऐसा लगता है कि वे लगभग समान हैं।ग्रिड और स्टैकपैनेल, जिसमें बेहतर प्रदर्शन है?

उपयोगकर्ता नियंत्रण 1, मेरे लेआउट को डिजाइन करने के लिए ग्रिड की संपत्ति का उपयोग करके।

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" Height="108"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
    </Grid.RowDefinitions> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition Width="*"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <Rectangle Grid.RowSpan="2" Grid.Row="0" Height="108" Width="54" Fill="Blue"></Rectangle> 
    <TextBlock Grid.Row="0" Grid.Column="1" Text="Caption" Style="{StaticResource PhoneTextExtraLargeStyle}"></TextBlock> 
    <TextBlock Grid.Row="1" Grid.Column="1" Text="URLURLURLURLURLURL" Style="{StaticResource PhoneTextSmallStyle}"></TextBlock> 
</Grid> 

उपयोगकर्ता नियंत्रण 2, मेरे लेआउट को डिजाइन करने के लिए StackPanel का उपयोग कर।

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}" Height="108"> 
    <StackPanel Orientation="Horizontal"> 
     <Rectangle Height="108" Width="54" Fill="Red"></Rectangle> 
     <StackPanel Orientation="Vertical"> 
      <TextBlock Text="Caption" Style="{StaticResource PhoneTextExtraLargeStyle}"></TextBlock> 
      <TextBlock Text="URLURLURLURLURLURL" Style="{StaticResource PhoneTextSmallStyle}"></TextBlock> 
     </StackPanel> 
    </StackPanel> 
</Grid> 

ऐसा लगता है कि मूल लेआउट समान है। लेकिन जब मैं विजुअलाइजिंग पेड़ का विश्लेषण करने के लिए एक्सएएमएल जासूस का उपयोग करता हूं, तो UserControl 1 में कम नोड्स होते हैं, लेकिन इसकी थोड़ी अधिक मेमोरी होती है। क्यूं कर?

उत्तर

22

आप इस सवाल का जवाब में रुचि हो सकती: In what order are Panels the most efficient in terms of render time and performance?

संक्षिप्त उत्तर यह है कि कितने बच्चों पैनलों है पर निर्भर करता है, और कैसे उन तत्वों आकार और तैनात कर रहे हैं। लेकिन ज्यादातर मामलों में, StackPanelGrid से अधिक कुशल होगा क्योंकि इसमें तेज गति और व्यवस्था दोनों पास हैं।

accepted answer से उद्धृत करने के लिए:

ग्रिड

एक लचीला ग्रिड क्षेत्र जो स्तंभ और पंक्तियों के होते हैं परिभाषित करता है।

आनुपातिक आकार या ऑटो आकार का उपयोग होने पर यह सबसे अधिक प्रदर्शन गहन पैनल हो सकता है। बाल वस्तु आकार की गणना करना आइटम के मूल आकार के जटिल संयोजन और ग्रिड द्वारा निर्दिष्ट लेआउट हो सकता है। लेआउट सभी पैनलों में भी सबसे जटिल है। माप पास के लिए मध्यम प्रदर्शन धीमा और व्यवस्था पास के लिए मध्यम प्रदर्शन धीमा।

StackPanel एक पंक्ति है कि क्षैतिज या लंबवत उन्मुख किया जा सकता में

व्यवस्था बच्चे तत्वों।

StackPanel या तो देशी या रिश्तेदार अपने उन्मुखीकरण से विपरीत दिशा में आकार और देशी अपने उन्मुखीकरण की दिशा में आकार (संरेखण इस दिशा में कुछ नहीं करता है) का उपयोग कर अपने बच्चों को मापता है। यह इस क्षेत्र में मध्य-स्तर का कलाकार बनाता है। व्यवस्था पास बस वस्तुओं को व्यवस्थित करने के लिए बस है। शायद इस पास के लिए दूसरा सबसे अच्छा प्रदर्शन। लेआउट पास के लिए माप पास और तेज प्रदर्शन के लिए मध्यम प्रदर्शन ।

स्मृति की खपत के संबंध में

इसके अलावा, दोनों वस्तुओं अलग हैं और स्मृति के विभिन्न मात्रा में लेते हैं और एक GridRowDefinitions और ColumnDefinitions है, तो यह वास्तव में की तुलना में आपके उत्तर के लिए अपने StackPanel

+0

धन्यवाद अधिक वस्तुओं शामिल हैं! – Eddie

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