레이블이 dotnet인 게시물을 표시합니다. 모든 게시물 표시
레이블이 dotnet인 게시물을 표시합니다. 모든 게시물 표시

2010년 11월 16일 화요일

닷넷 코드 엑세스 보안과 WPF 성능

 

http://msdn.microsoft.com/ko-kr/library/930b76w0(v=VS.90).aspx

악의적인 이식 가능한 코드로부터 시스템을 보호하고, 알 수 없는 출처에서 가져온 코드를 안전하게 실행하고, 신뢰된 코드가 실수 또는 의도적으로 보안을 손상시키지 않도록 .NET Framework에서는 코드 액세스 보안이라는 보안 메커니즘을 사용합니다. 코드 액세스 보안은 코드 발생 위치 및 코드 ID의 다른 측면에 따라 다양한 수준으로 코드를 신뢰할 수 있습니다. 또한, 코드 액세스 보안은 코드에 다양한 신뢰 수준을 적용하여, 실행하기 위해 완전히 신뢰되어야 하는 코드 분량을 최소화합니다. 코드 액세스 보안을 사용하면 악의적이거나 오류가 많은 코드에 의해 사용자 코드가 오용될 가능성이 적습니다. 사용자는 코드가 수행할 수 있는 작업 집합과 수행할 수 없는 작업 집합을 지정할 수 있으므로 위험 부담을 줄일 수 있습니다. 또한 코드 액세스 보안은 코드의 보안상 약점으로 인해 생길 수 있는 손상을 최소화합니다.

 

공용 언어 런타임 기능이 있는 모든 관리 코드는 코드 액세스 보안을 전혀 호출하지 않아도 코드 액세스 보안의 장점을 활용할 수 있습니다. 그러나, 모든 응용 프로그램은 코드 액세스 보안 기본 사항에서 설명하는 것처럼 코드 액세스 요청을 해야 합니다.


위와 같은 보안 매커니즘 때문에 닷넷 어플에서 로드한 어셈블리는 보안 인증을 먼저 거치게 됩니다. 그러나 인증 과정은 네트워크를 거치게 되므로 이때 부하가 생깁니다.

하지만 이 과정이 꼭 필요하지 않은 경우도 있습니다. 예를들어, ClickOnce로 배포할 경우, 인증과정 및 게시자 증명 과정을 필수적으로 거치게 됩니다. 하지만 이를 사용하지 않으면 굳이 증명을 할 필요가 없습니다.


http://msdn.microsoft.com/ko-kr/library/cc656914.aspx

Authenticode 확인도 시작 시간이 길어지는 원인이 될 수 있습니다.Authenticode 서명된 어셈블리는 CA(인증 기관)를 통해 확인되어야 합니다.이 확인 작업을 수행하려면 최신 인증서 해지 목록을 다운로드하기 위해 네트워크에 여러 번 연결해야 하므로 시간이 오래 걸릴 수 있습니다.또한 이 과정에서 신뢰할 수 있는 루트로 연결되는 경로에 대한 유효한 인증서가 모두 있는지도 확인합니다.이로 인해 어셈블리가 로드되는 동안 몇 초 정도 작업이 지연될 수 있습니다.
클라이언트 컴퓨터에 CA 인증서를 설치하거나, 가능하면 Authenticode를 사용하지 않는 것이 좋습니다.응용 프로그램에서 게시자 증명 정보를 필요로 하지 않는 경우 서명 확인에 리소스를 낭비할 필요가 없습니다.

 

http://msdn.microsoft.com/ko-kr/library/bb629393.aspx

CLR(공용 언어 런타임)은 어셈블리에 대한 Publisher 증명 정보를 만들기 위해 로드 시 Authenticode 서명을 확인합니다.그러나 기본적으로 대부분의 응용 프로그램에는 Publisher 증명 정보가 필요하지 않습니다.표준 CAS 정책은 PublisherMembershipCondition을 사용하지 않습니다.사용자 응용 프로그램이 사용자 지정 CAS 정책을 사용하는 컴퓨터에서 실행되지 않거나 부분 신뢰 환경에서 PublisherIdentityPermission에 대한 요청을 충족시키기 위한 것이 아닐 경우 게시자 서명 확인과 관련된 불필요한 시작 작업을 수행하지 않아야 합니다.전체 신뢰 환경에서는 ID 권한 요청이 항상 성공합니다.

 

따라서 예외적인 시나리오의 경우엔 보안 인증 과정을 생략하여 성능을 올릴수 있습니다. (있다고 합니다.)


http://msdn.microsoft.com/ko-kr/library/cc656914.aspx

 

.NET Framework 3.5부터는 Authenticode 확인을 건너뛸 수 있는 구성 옵션을 사용할 수 있습니다. 이렇게 하려면 app.exe.config 파일에 다음 설정을 추가하십시오.

 <configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>

 

 

 

 

 

이 글은 스프링노트에서 작성되었습니다.

2010년 6월 21일 월요일

3D Webbrowser

프로그램 안에 웹 브라우저 기능을 넣어야 하는 일이 있습니다. 근데 다음의 기존 웹 브라우져들의 기능이 영 시원치 않아서 다른걸 찾아보았습니다.

 

  •  System.Windows.Forms.Control.WebBrowser
    닷넷에서 웹브라우저를 사용하기 위해서 사용할수 있는 브라우져 입니다. IE를 호스트 하여 만들어져 있습니다.
  •  System.Windows.Control.WebBrowser
    위 윈폼 브라우저를 WPF에서 사용하기 쉽게 하기 위해서 3.5 부터 지원하는 브라우져라 합니다.
    하지만 위 브라우저를 WPF용으로 만든것 이상도 이하도 아닙니다.

위 2개는 비주얼 캡쳐도, 위치 변형도 안되는 그런 컨트롤이라

 

그래서 발견한것이 아래 링크의 컨트롤입니다.

http://chriscavanagh.wordpress.com/2009/08/25/a-real-wpf-webbrowser/

 

그냥 집어넣고 크기 변경하고 회전시키고 변형시키는거 모두 다 되네요 ㅋㅋ



게다가 3D 효과도 ㅋㅋ


 

배경 투명도 ㅋㅋㅋ


 

 

터치가 될런지 모르겠지만;;; 조금 손보면 괜찮을지도?

 

 

 

 

 

 


이 글은 스프링노트에서 작성되었습니다.

2010년 6월 19일 토요일

VisualBrush와 RenderTargetBitmap

 

WPF에서 쓰이는 화면에 보이는 UIElement들은 제 각각 Visual 이라는 객체를 상속받아 만들어지는데 이들은 스스로 자신을 화면에 그릴수 있는 기능이 있다. 따라서 Visual의 이 기능을 이용하여 다음과 같이 재밌는 일을 할수 있다. (미리보기등을 이러한 방법으로 만들수 있다.)

 

Clone 화면 만들기

VisualBrush를 이용하면 Visual의 화면 이미지를 실시간으로 복제하여 Brush를 필요로 하는 위치에 그려주게 된다. 내부적으로 브러시의 원본 객체의 surface 를 복제함으로서 이루어진다.

 

 

  1. VisualBrush brush = new VisualBrush(this.DrawingCanvas);
  2. Rectangle rect = new Rectangle();
  3.  
  4. rect.Width = this.DrawingCanvas.ActualWidth;
  5. rect.Height = this.DrawingCanvas.ActualHeight;
  6. rect.Fill = brush;

    Window wd = new Window();
  7. wd.Content = rect;

 

 

마치 클론 화면을 쓰는 것처럼 쉽게 복제된 화면을 여러개 만들수 있다. 원본 화면에서 뭔가 일어나면 다른 화면에서도 똑같이 발생한다.



화면의 특정부위 스샷찍기

화면을 복제하는 것보다, 그때 스샷을 찍고 싶을때가 있다. 특히 원하는 컨트롤 또는 부위에 대해서. 이런때엔 RenderTargetBitmap을 이용하면 간단히 해결된다. 이때엔 별도의 Bitmap이미지를 생성한후 객체의 Visual 화면을 BitBlt 하여 복제한다. 단, 이때엔 새로만들어지는 비트맵의 색상 또는 dpi를 지정해 줄수 있는데 이를 이용하여 성능을 조절할 수 있다.

 

 

  1. RenderTargetBitmap rtb = new RenderTargetBitmap((int)this.DrawingCanvas.ActualWidth, (int)this.DrawingCanvas.ActualHeight, 100, 100, PixelFormats.Default);
    rtb.Render(this.DrawingCanvas);

    Window testWin = new Window();
    testWin.Width = this.DrawingCanvas.ActualWidth;
    testWin.Height = this.DrawingCanvas.ActualHeight;
    (testWin.Content as Image).Source = rtb;

    testWin.Show();

 

 

현재 화면을 복제하고, 원본 화면이 바뀌더라도 현재 화면을 유지한다.

 

 

 

 

이 글은 스프링노트에서 작성되었습니다.

2010년 5월 6일 목요일

Advanced silverlight graphics

 

항상 바닥부터 이해하는것이 필요하고, 중요하지만...

WPF/Sliverlight 기술의 애니메이션, 렌더링 과정이 하부에서 어떻게 이루어지는지 항상 궁금했는데

관련된 좋은 자료가 있네요, 조사해서 관련 자료를 정리해 포스팅 하겠습니다. (좀 걸릴지도 모르지만;;)

특히 윈도폰7에서의 그래픽 최적화 이야기는 주목할만하군요.

 

예제와 PPT 내용은 다 보고 참고 링크는 다 조사해 봅시다!

 http://gongdosoft.com/485

 

 

이 글은 스프링노트에서 작성되었습니다.