2013-05-30 11 views
7

मैंने पहले ही नेट पर कई साइटों की खोज की है, लेकिन मुझे कोई समाधान नहीं मिला। बयान यह है कि UserControl और कस्टम कंट्रोल के बीच कोई प्रदर्शन अंतर नहीं है।प्रदर्शन उपयोगकर्ता नियंत्रण/कस्टम नियंत्रण

लेकिन मैं निम्नलिखित परीक्षण दसवीं कक्षा, UserControl, CustomControl और MainWindow:

public class X : INotifyPropertyChanged 
{ 
    private string _title; 
    public string Title 

    { 
     get 
     { 
      return _title; 
     } 
     set 
     { 
      if (value == _title) 
      { 
       return; 
      } 
      _title = value; 
      OnPropertyChanged("Title"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

UserControl:

<UserControl x:Class="controlperformance.DisplayView" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> 

<Grid Name="root" Background="LightGray"> 
    <TextBlock Text="{Binding Title}" /> 
</Grid> 

</UserControl> 

CustomControl:

public class DisplayControl : Control 
{ 
    #region Title 

    public string Title 
    { 
     get 
     { 
      return (string)GetValue(TitleProperty); 
     } 
     set 
     { 
      SetValue(TitleProperty, value); 
     } 
    } 

    public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", 
                          typeof(string), 
                          typeof(DisplayControl), 
                          new PropertyMetadata(default(string))); 

    #endregion 

    static DisplayControl() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(DisplayControl), new FrameworkPropertyMetadata(typeof(DisplayControl))); 
    } 
} 

Xaml:

<Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:DisplayControl}"> 

       <Grid Background="white"> 
        <TextBlock Text="{TemplateBinding Title}" /> 
       </Grid> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

MainWindow:

public partial class MainWindow : Window 
{ 
    Stopwatch sw = new Stopwatch(); 

    public MainWindow() 
    { 

     InitializeComponent(); 

     Loaded += OnLoaded; 

     sw.Start(); 

     ObservableCollection<X> list = new ObservableCollection<X>(); 
     Random r = new Random(); 

     for (int i = 0; i < 50000; i++) 
     { 
      list.Add(new X { Title = r.Next().ToString()}); 
     } 

     itemscontrol.ItemsSource = list; 
    } 

    private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) 
    { 
     sw.Stop(); 
     MessageBox.Show(sw.Elapsed.ToString()); 
    } 
} 

MainWindow सामग्री:

<ItemsControl Name="itemscontrol"> 
      <ItemsControl.ItemTemplate> 
       <!--<DataTemplate DataType="{x:Type Controlperformance:X}"> 
        <Controlperformance:DisplayView DataContext="{Binding}" /> 
       </DataTemplate>--> 
       <DataTemplate DataType="{x:Type Controlperformance:X}"> 
        <Controlperformance:DisplayControl Title="{Binding Title}"/> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
</ItemsControl> 

CustomControl उपयोग करते समय, MessageBox लगभग दर्शाता है। मेरे कंप्यूटर पर 20 सेकेंड, लेकिन UserControl का उपयोग करते समय, इसमें लगभग एक मिनट लगते हैं! नियंत्रण को अपने ग्रिड के साथ टेक्स्टबॉक्स में बदलना, यह कस्टमकंट्रोल (~ 16 सेकंड) से भी तेज है।

क्या कोई देख सकता है कि बाधा कहां है? समस्या मेरे असली दुनिया के अनुप्रयोग में बढ़ती है, जहां खाका/नियंत्रण अधिक जटिल होगा।

धन्यवाद एक बहुत,

सूक्ष्म

उत्तर

-1

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

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

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

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