код теста
От: SiAVoL Россия  
Дата: 18.08.08 06:21
Оценка:
using System;
using System.ComponentModel;
using System.Linq.Expressions;

namespace testPropertyName
{
    class Program
    {
        static void Main()
        {
            for(int i=0; i<10; i++)
            {
                TestIteration();
            }
        }

        static void TestIteration()
        {
            const int iterationsCount = 100000;

            A1 a1 = new A1();
            a1.PropertyChanged += delegate {  };

            PerfCounter counter = new PerfCounter();
            counter.Start();
            for (int i = 0; i < iterationsCount; i++)
            {
                a1.MyProperty = i.ToString();
            }
            float time1 = counter.Finish();

            A2 a2 = new A2();
            a2.PropertyChanged += delegate { };
            counter.Start();
            for (int i = 0; i < iterationsCount; i++)
            {
                a2.MyProperty = i.ToString();
            }
            float time2 = counter.Finish();

            Console.WriteLine("new: {0:### ### ##0.0000}  old: {1:### ### ##0.0000}", time1, time2);
        }
    }

    class A1 : INotifyPropertyChanged
    {
        private string _myProperty;

        public string MyProperty
        {
            get { return _myProperty; }
            set
            {
                _myProperty = value;
                InvokePropertyChanged(() => MyProperty);
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void InvokePropertyChanged<T>(Expression<Func<T>> property)
        {
            PropertyChangedEventHandler Handler = PropertyChanged;
            if (Handler != null)
            {
                MemberExpression expression = (MemberExpression) property.Body;
                Handler(this, new PropertyChangedEventArgs(expression.Member.Name));
            }
        }
    }

    class A2 : INotifyPropertyChanged
    {
        private string _myProperty;

        public string MyProperty
        {
            get { return _myProperty; }
            set
            {
                _myProperty = value;
                InvokePropertyChanged("MyProperty");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void InvokePropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler Handler = PropertyChanged;
            if (Handler != null)
            {
                Handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1096>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.