본문 바로가기

Dev::DotNet

(54)
WPF 에서 Resize 시 멈춤 현상 얼마 전부터 몇몇 Client 에서 프로그램을 Resize 할 때 마다 멈추는 현상이 발생하였다.프로젝트 오픈이 얼마 남지 않은지라 비상전시 체계로 돌입하여 원인을 찾기 시작했다. 특정 Client 에서 프로그램의 내부 / 외부를 가지 않고 모든 Resize 시 CPU 점유율이 50%까지 치솟고 몇 십 초에서 몇 분까지 멈추기 때문에 굉장히 심각한 문제였다. 하지만 WPF 로 만들었기 때문에 Resize 에 대해서 특별히 다른 처리를 해준 것은 없었고 그래서 이벤트나 쓰레드 는 물론이고 안에 들어가 있는 거의 모든 로직에 대해서 검토를 하였지만 별 다른 이상을 찾지를 못했다. 테스트를 하다 보니 MeasureOverride 와 ArrangeOverride 에서 거의 대부분의 시간을 소요하는 것을 알게 되..
NetAdvantage XamDockManager 의 Menu 비활성화 infragistics NetAdventage 의 XamDockManager 를 사용하다보니 Docking Control 이라면 당연히 제공되는 기능이지만... 사용자가 해당 Pane 의 Docking 속성을 변경 할 수 있는 팝업 메뉴를 제공하고 있었다. 하지만 이런 메뉴가 필요치 않아서 제거하려고 약간의 문제점이 있었다.단순히 메뉴를 비활성화 하는 프로퍼티가 없는 듯 했다. 확실히는 잘 모르겠다. Template 을 재정의해서 어찌어찌하면 될 것 같기도 하고...Pane 헤더 부분을 구성하고 있는 별도의 컨트롤이 있어서 그녀석을 어찌어찌해주면 될 것도 같지만... 그냥 눈에 보이는 컨트롤 부분에서 해결하려고 하니저 메뉴에 나오는 기능에 대한 활성/비활성에 대한 옵션은 제공하고 있었고 저 메뉴에 포함된..
ComboBox 의 SelectedValue 와 SelectedItem 의 성능적 차이 WPF ComboBox 에 Item 을 선택할 때 SelectedIndex SelectedValue SelectedItem 이렇게 세가지 방법이 있다. 이번 주제는 SelelctedValue 와 SelectedItem 의 차이에 대해서 이야기 해보겠다. SelelctedValue 는 ComboBox 에 ItemsSource 를 Binding 시 그 바인딩 한 객체의 특정한 프로퍼티를 지정하여 검색하여 할 때 그 지정한 프로퍼티의 값을 찾아서 해당 아이템을 선택한다. SelectedItem 은 Binding Item 의 객체를 넣어주면 그 객체로 그냥 선택이 된다. 문제는 2개의 성능에서 차이가 있다는 것이다.일반적으로 아이템의 개수가 작거나 컴퓨터의 성능이 어느 정도 이상이면 이런 문제는 발생하지 않지만..
Spread 에서 이미지 Attach 시 Memory Leak Spread 의 Annotation 기능을 제공하는데 그 중에 이미지를 Attach 할 수 있는 기능이 있다. [FarPoint.Win.Resouce Portal] 이미지를 Attach 하면 그 이미지에 대한 위치 / 크기 / 회전 에 대한 다양한 기능을 지원하는데..문제는 여기서 발생한다. 아래는 Spread 에서 기본 제공하는 Resouce Portal 에서 이미지를 Attach 했을 때 작업관리자에 표시된 정보이다. 사용 중인 메모리는 135메가 이다. 이제 그 이미지를 선택해서 아래와 같이 좌우로 한 10번 쯤 이동시켰다. 그리고 작업관리자에 메모리 사용량을 보면 약 70메가 정도가 급 상승한 것을 볼 수 있다. 별 다른 작업없이 그냥 그냥 올라간 이미지를 잡고 움직이는 것 만으로 사용하는 메모리..
Prism - 완전 단순한 Sample Source winform 을 하다가 갑자기 wpf 를 하라고 해서 부랴부랴 한 5일 책을 읽고 엉겁결에 wpf 에 입문해서 닥치는 대로 우선 만들었는데...그러다 보니...완전 개념 상실. MVVM 이고 Prism 이고 뭐고 다 저 뒤편으로 팽개쳐놓고 있다가이제 서야 Prism 을 조금씩 공부해보려 하니...나이도 먹고..머리가 썩은지라...더군다나 혼자 하려니...너무 어려웠다. 우선 처음으로 간단하게 빈 메인 화면 띠우는 것 부터...하려고 하였으나...Prism 샘플로 있는 소스는 너무 복잡해서...이것저것 다 빼고 어찌어찌 해서 만든 완전 단순한 "Hello World" 수준의 그냥 화면만 뜨는 샘플 소스를 만들었다. 우선 Bootstrapper 를 상속받아 기본적으로 Application 실행에 필요한 M..
확장 메소드(Extension Methods) 확장 메소드는 기존 Type 에 메소드를 추가할 수 있게 해준다. 예를 들어 TextBox 에 AppendText 라는 메소드가 있습니다.TextBox 에 문자열을 추가하는 기능을 합니다. 하지만 자동으로 개행이 되는 AppendText 가 필요하다고 하면 (그냥 NewLine 을 붙여도 되겠지만....)TextBox 를 상속받아서 AppendText 메소드를 추가해야 한다. 1void AppendText(string textData, bool IsNewLine)cs 그렇게 되면 상속받아서 만든 TextBox 의 인스턴스에서만 사용이 가능하며예시처럼 컨트롤이라면 디자인에 올라간 컨트롤도 교체를 해야한다. 하지만 확장 메소드를 이용하면 쉽게 해결이 가능하다. 1234567public static class..
XmlnsDefinition 을 통한 namespace 매칭 WPF 프로젝트를 만들어서 Window 를 만들면 이런 Xaml 코드가 생긴 것을 볼 수 있다. 처음 WPF 를 접하면 "xmlns" 과 "xmlns:x" 가 약간 낯설다. 조금만 공부하면 저것들이 namespace 를 Xaml 코드에서 사용하기 위해서 정의한 것임을 알 수 있다. 참고> xmlns 기본 네임스페이스와 닷넷 네임스페이스의 맵핑 구조 wpf 에서는 xmal 에서 여러 DLL 에 정의된 namespace에 접근하기 위해서XmlnsDefinition 을 통해서 몇 개의 URL 로 정의하여 매칭시켜놓았다. [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml", "System.Windows.Markup")] [assem..
Spread 의 Annotation 시 속도 문제 FarPoint Spread 에 Annotation 기능이 있다. [Spread Sample] Pen 이나 각종 Shape, 이미지 를 올려서 편집이 가능하고 엑셀 파일을 저장/로드했을 때 바로 연동도 가능하다.굉장히 편하고 유용한 기능이다. 일반적으로 사용했을 경우에는 말이다. Spread Sheet 에 셀 Merge 좀 해주고 이미지 좀 넣어주고 그러면 그럴수록..(화면으로 표시되고 그려야할 부분이 넓고 복잡한 하고 다양한 셀 구조를 가지면)Pen 으로 Drawing 시 속도는 눈에 뛰게 떨어진다. 원인을 이야기 해보자면..우선 Spread 는 컨트롤을 화면에 그릴 때 극악의 포퍼먼스를 자랑한다.특히 여러 Cell 을 Merge 했을 때, 더군다나 그 Merge 된 Cell 안에 멀티라인으로 텍스트를..