'Windows'에 해당되는 글 22건
- 2008.10.16 Windows XP - 지연된 쓰기 실패 4
- 2008.10.14 ATL and MFC String Conversion Macros - 유니코드와 아스키 변환
2008. 10. 16. 10:09
Windows XP - 지연된 쓰기 실패
2008. 10. 16. 10:09 in Windows
나는 IEEE1394 HDD 쓰는 것을 좋아한다.
USB 보다도 빠르고 안정적이기 때문이다.
전에는 그런 문제가 없었는데, 최근 1년 정도는 "지연된 쓰기 실패" 오류 때문에 외장 HDD 사용에 심한 걱정을 한다. 보통은 잘 동작하다가 조금 큰 화일을 복사 혹은 이동하면 시간이 걸리기 시작하면서 예상 시간이 늘어난다. 20분...30분까지 늘어난 후에, "실패" 메시지가 뜨면서 "지연된 쓰기 실패"와 함께, 외장 HDD가 시스템에서 사라진다. 다시 뺏다가 꽂아도 나타나질 않는다. 가끔 나타나면, 이상한 HDD로 제대로 인식되지도 않는다. 결국 Reboot 하면 다시 잡힌다...
오늘 맘 먹고 인터넷을 뒤졌더니, 해결책이 있기는 한가 보다.
Windows XP에서 문서를 저장하거나 이동하면 "지연된 쓰기 실패" 오류 메시지가 나타날 수 있다.
(링크가 문제가 있어서 다른 링크 https://blog.naver.com/wung9/80128056510 )
여기를 보니 "디스크에 쓰기 캐시 사용" 기능을 해제하라고 한다. 뭐 이딴 해결책이 있어(궁여지책인듯). 이건 아니라는 생각이 들어 내용을 더 보았다.
아래쪽에 보면 지연된 쓰기 실패 라는 구문이 있는데, 거기에 이상한 말이 있다.
Windows XP에서 큰 시스템 캐시 기능을 사용할 수 있도록 설정한 경우 데이타가 손상될 수 있습니다.
음 아무리 Windows 가 꼬지긴 했어도. 참 그런데 아래 말은 더 어이가 없다.
- 512Mb보다 큰 시스템 메모리 (1GB의 RAM이 일반적임)
- 큰 NTFS 디스크 볼륨 및 여러 큰 볼륨 (60~100GB의 하드 드라이브, RAID 배열에 있을 수 있음)
- 큰 파일 전송. 이 문제는 컴퓨터에 시스템 페이지 테이블 항목이 부족한 경우 발생합니다. 컴퓨터가 시작되면 Windows에서 사용 가능한 시스템 메모리 크기에 따라 할당할 페이지 테이블 항목의 기본 수를 결정합니다.
여하튼 그 아래의 해결 과정으로 SystemPages 값을 변경하였다.
혹시나 해서 이 값에 대한 다른 시스템의 값을 조사해 보았다.
- DELL505 P4-M 1.6GHz 1G RAM 은 기본값이 0x63000 이었네. (Intel Graphic)
- DELL800 (Single Core) 및 DELL820 (Dual Core)은 P4-M 2GHz, 1G RAM 모두 0x3F000 이다. (nvidia graphic)
여하튼 권고사항 대로 0xFFFFFFFF 로 설정하였다... 재 부팅하고, 오호 문제가 생기지 않았다.
그런데, 아무래도 0xFFFFFFFF 는 너무 큰 값이라 생각된다. 뭐 이 값을 사용한다고 해서 Page file 크기가 늘어나는 것이 아니고, (추측) 아마도 위에서 언급한 시스템 페이지 테이블 항목의 수가 최대값을 설정한 것이 아닌가 한다. 작업관리자로 검사해 보면 메모리 사용량에 대한 비율이 크게 변하지 않았으며, C:\ 폴더의 Pagefile.sys 도 변하지 않았다.
우선은 이 값으로 사용해 보고 나중에 문제가 생기면 바꿔 봐야 겠다.
<결론적으로, SystemPages 값만 바꿔서 문제가 없어진 듯 하다>
여하튼 "지연된 쓰기 실패"의 괴로움에서 벗어나는 듯 싶다.
2008. 10. 14. 15:58
ATL and MFC String Conversion Macros - 유니코드와 아스키 변환
2008. 10. 14. 15:58 in Windows
Visual Studio 6 을 사용할 때는 무조건 ASCII 를 사용했는데,
Visual Studio 2005를 사용하니, 유니코드를 Default로 사용하게 되는 군요.
그런데, 여전히 CFile 이라는 함수의 멤버들은 모두 ASCII 문자 처리를 하니 무척 난감합니다.
char 배열을 만들어서 일일히 옮겨서 썼었는데, 이미 훌륭한 매크로를 제공하고 있더군요.
여러 사이트에서 이미 소개되고 있기도 하죠.
참고 사이트: USES_CONVERSION을 사용하려면
추가로, MSDN을 찾아 보니 위의 제목으로 설명하고 있더군요.
이것도 버젼이 있군요. ATL 3.0 과 ATL 7.0 인데, 차이점은
이것도 버젼이 있군요. ATL 3.0 과 ATL 7.0 인데, 차이점은
Old ATL 3.0 Conversion Macros | New ATL 7.0 Conversioin Classes |
스택을 사용함 | 작은 문자열은 스택을 사용하고, 스택이 충분히 크지 않으면 Heap을 사용함 |
함수가 종료될 때 문자열이 Free됨 | 변수의 영역(scope)을 벗어나면 문자열이 Free됨 |
예외처리자를 사용할 수 없음 | 예외처리자를 사용할 수 있음 |
반복 루틴(Loops)에서 사용하기 적합하지 않음. 함수가 종료할 때까지 메모리가 증가함 | 반복 루틴에서의 사용을 지원함. 매번의 반복 루틴에서 문자열이 Free됨 |
큰 문자열에 적합하지 않음. 스택의 크기 제한에 걸림 | 문자열이 커도 상관 없음. Stack/Heap을 사용하기 때문 |
USES_CONVERSION 정의가 필요함 | USES_CONVERSION 정의를 하지 않음 |
OLE의 경우에는 OLE2ANSI를 정의 | OLE인 경우에는 W와 동등하게 취급함 |
이군요.
차이점만 봐서는 무조건 ATL 7.0의 classes를 써야 겠군요.
ATL 7.0 에서는
A, W, T , OLE 라는 문자를 조합해서 사용합니다.
사용법은 나중에 시간이 되면, 써 보도록 하죠.
그럼. 근데 문서 만들기 무척 힘들군요. 쉬운 방법 없을까요? 뭐 워드로 만들어서 올린다던가 뭐 그런거요?
A, W, T , OLE 라는 문자를 조합해서 사용합니다.
사용법은 나중에 시간이 되면, 써 보도록 하죠.
그럼. 근데 문서 만들기 무척 힘들군요. 쉬운 방법 없을까요? 뭐 워드로 만들어서 올린다던가 뭐 그런거요?