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>>