2009-02-27 5 views
6

저는 C#에서 WriteableBitmap을 다루고 있습니다. 현재 안전하지 않은 코드 블록을 사용하여 WriteableBitmap.BackBuffer을 통해 픽셀에 직접 액세스하고 있습니다. 차라리 /unsafe 옵션에 의존하지 않으려 고하므로 대신 WriteableBitmap.WritePixels을 사용하는 것이 좋습니다./unsafe 플래그에 해당하는 "전처리 기"기호가 있습니까?

"안전하지 않은"버전에서 조건부로 컴파일하는 방법이 있습니까? 프로젝트 파일에 수동으로 통합하지 않고/unsafe 옵션을 사용했을 때 사용할 수 있습니까? 내가의 라인을 따라 뭔가를 찾고 있어요 한마디로

: 런타임에

#if UNSAFE 
    //my unsafe version 
#else 
    //the supposedly safe version goes here 
#endif 

감지가 너무 좋다; 그러나 나는 항상 /unsafe으로 컴파일해야한다는 것을 의미합니다. 이는 라이브러리 코드가 프로젝트 파일 업데이트를 필요로한다는 것을 의미합니다. 이는 덜 편리합니다.

기본적으로 빠른 버전은 중요한 시점에 보관하고 싶지만 무엇이 문제없이 작동하는 합리적인 버전이 필요합니다.

답변

4

"안전하지 않은 디버그"및 "안전하지 않은 릴리스"라고하는 기존의 옵션과 안전하지 않은 확인란을 선택하고 UNSAFE의 조건부 기호를 추가하는 구성 관리자를 사용하여 하나 이상의 새로운 구성을 만드는 것이 좋습니다. 안전하지 않은 옵션을 토글하는 대신 안전하지 않은 구성을 사용합니다.

또한 안전하지 않은 어셈블리의 출력 이름을 변경하여 Bitmaps.dll 및 Bitmaps.Unsafe.dll과 같은 두 개의 어셈블리를 가질 수 있으므로 어셈블리의 클라이언트가 어느 것이 가장 적합한 지 결정할 수 있습니다 참조 할 어셈블리를 지정합니다.

+0

이것은 (구성자의 제안처럼) 참으로 꽤할만한 것처럼 보입니다. 감사합니다! –

1

/unsafe /define:SAFE으로 컴파일하는 것이 좋습니다. 아마도 내가 알지 못하는 또 다른 방법이있을 것입니다.

0

나는 당신이 당신의 예에 준 것처럼 그런 다음 코드를 사용할 수 있습니다이 코드

#define UNSAFE 
#undef UNSAFE // comment this line out if you want to compile the save version 

을 시도 할 수 있습니다 생각합니다.