이것은 추측이지만 이전에 나에게 일어난 일이며 가치가 있습니다. 짐작하기에 앞서, 코드를 프로파일 링하여 정확히 전화가 걸리는 시간을 확인하십시오. 바인딩을 사용할 때 시간이 급격히 늘어났다 고 말할 때 나는 당신을 믿습니다. 그러나 제가 제시하려고하는 제안은 프로파일 링 결과로 입증되거나 불일치 될 수 있습니다. 어쨌든 ...
저는 얼마 전에 작은 UI 요소를 많이 생성하는 응용 프로그램을 만들었습니다. 각 요소는 UserControl
의 인스턴스이고 데이터 바인딩을 사용하여 모양을 나타냅니다. 나는 많은 요소 (200 개 이상)를 생성 할 때 상당한 요소가 있다는 것을 알아 차렸다.
우리는 즉, RaisePropertyChanged
방법 대표단에 전달 프리즘과 그 ViewModelBase
클래스를 사용하고,
private int _foo;
public int Foo
{
get { return _foo; }
set
{
if(_foo != value)
{
_foo = value;
RaisePropertyChanged(this.Foo); // trouble
}
}
}
이 문제는 RaisePropertyChanged
의 구현이 같은 속성 이름을 얻기 위해 반사를 사용해야한다는 것입니다 끈. 이 중 상당수 (그리고 나는 많은 것을 의미)가 해고 당했을 때 중요한 성과가 나타났습니다.
해결책? 함수 객체 대신 문자열을 사용하십시오. 네, 그게 전부입니다. 그것은 당신이 속성을 리팩토링한다면 두 가지를 바꾸어야한다는 것을 기억해야하기 때문에 약간 악취가납니다. 그러나 솔직히 말해서 성능 저하는 많은 환경에서 가치가 없습니다.
어쨌든, 한번 해보십시오. 많은 CPU 시간이 RaisePropertyChanged
안에있는 경우 그 이유가있을 수 있습니다.
의견을 보내 주셔서 감사합니다. 그러나 모든 속성은 읽기 전용이므로 변경되지 않으므로 'PropertyChanged'가 전혀 사용되지 않습니다. 프로파일 링을 수행하는 데 사용할 소프트웨어에 대한 제안 사항이 있습니까? 나는 어떤 것을 시도했지만, 의미있는 결과를 얻는 것은 매우 복잡해 보입니다. – Muis
@ Joshua : 죄송합니다. 도움이 될 수 없습니다. redgate의 ANTS 프로파일 러를 사용하여 좋은 결과를 얻었습니다. 2 주 동안 무료입니다. –