본문 바로가기

Dev::DotNet/C#

System.Drawing.Printing.PageSettings 의 PrintableArea 프로퍼티에 대한 문제

별도의 출력을 만들때 


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초정도 소요되었다.