별도의 출력을 만들때
System.Drawing.Printing.PageSettings 객체를 통해서 이것저것 사용할 때가 있다.
문제는 그안에 PrintableArea 라는 RectangleF 를 반환하는 프로퍼티가 있다.
해당 값을 통해서 출력 가능영역을 계산할 수 있는데.....
대충 예를 들어서 이런식으로 쓴다고..하면
System.Drawing.Printing.PageSettings PageSettings = new System.Drawing.Printing.PageSettings();
...
float y = PrintableArea.Height;
float x = PrintableArea.Width;
float v1 = PrintableArea.Height - PrintableArea.Y;
float x1 = PrintableArea.Width - PrintableArea.X;
생각지도 못한 속도를 보게 된다.
대략 i7 8G 가 컴에서 차이는 있겠지만 약 0.1초가 소모된다...단 4줄에..
여러장 출력할 때 그냥 생각없이 루프 돌려버리면 끝장난다..
PrintableArea 프로퍼티를 6번 접근했을 뿐인데..굉장한 시간 소모를 볼수있다.
그래서 저 문제의 PrintableArea 를 보니...
get 안에 저런게 되어 있었다....있는걸 가져오는게 아니라 접근할 때마다 새로 만든다.
PrintableArea 를 사용하기 위해서는 어쩌든 한번은 접근을 해야하는데...
성능이 좋지 않은 컴에서는 저 한번도 상당한 시간 소모가 예상된다....
나는 Thread 로 미리 가져왔다...
프로퍼티에서 RectangleF 를 가져오는데...Thread까지 사용하다니...ㅡㅡ;
--->>
PrintableArea 를 구하는 과정에서 설치된 프린터와 통신을 해서 가져오는 부분이 많다고 한다.(참고페이지)
잘못된 프린터가 잡혀있던가 프린터 드라이버가 이상하거나...최악으로 프린터가 이상하거나...
그러면 엄청나게 걸리는듯하다. 잘못된 프린터를 잡아놓고 해본 결과 한번 접근하는데 약 0.4초정도 소요되었다.
'Dev::DotNet > C#' 카테고리의 다른 글
마우스 이동에 따른 화면 이동 (0) | 2013.10.29 |
---|---|
GZipStream 을 이용한 문자열 압축 (0) | 2013.10.28 |
Windows Version 구분 (0) | 2012.08.10 |
System.Environment.CurrentDirectory 의 경로 (0) | 2012.08.04 |
Assembly 의 Version 을 날짜로 바꾸기 (1) | 2012.08.03 |