open VS fopen VS CreateFile 성능 차
글쓴이: hol_ding / 작성시간: 토, 2014/04/19 - 9:10오후
Windows 환경을 기준으로 질문드려봅니다.
게임 엔진을 제작하던 도중 '파일 입출력' 파트를 프로그래밍하는데 생긴 궁금증이네요.
크로스 플랫폼을 목표로 하는 게임 엔진 인지라 뭘 선택해야할지 더 고민이 됩니다.
open (엄밀히 말하자면.. VS2012에서 open은 deprecated 되어서 _open이 맞겠지만 말이지요) 함수는 커널 함수인걸로 알고있습니다.
CreateFile은 Windows에서 제공하는 API인걸로 알고있는데 어느 서적에선지 이 함수가 저수준 파일 입출력 함수라고 본적이 있는것 같습니다.
fopen은 이식성을 위해서 두 함수중 하나를 이용하는 wrapper 함수이자 표준인걸로 알고있습니다.
.. 방금 책을 확인해본 바로는 CreateFile에서 보안 수준 및 여타 다른것들을 보장해준다고 하네요.
추정하는것이긴 하지만 보안 수준 및 다른 부분을 같이 처리한다면 CreateFile은 느린게 맞나요?
저수준 함수라는데 혹해서 사용할지 말아야 할지 모르겠습니다.
무엇보다 속도가 가장 중요한 상황에서 뭐가 가장 좋은 선택일까요?
※ 만일 CreateFile 함수를 선택한다 해도 다른 OS에 맞게 분기해서 코딩할 생각입니다.
Forums:
성능차는 잘 모르겠지만 fopen 하나의 오버해드가
성능차는 잘 모르겠지만 fopen 하나의 오버해드가 걱정될 정도로 수많은 파일을 열어야 한다면 디비(파일디비)쓰는게 맞지 않나 싶습니다.
질문 내용에서 언급했듯이 게임 엔진을 개발하는
질문 내용에서 언급했듯이 게임 엔진을 개발하는 중이었습니다.
API 하나하나의 속도가 생명인 상황인데..
많은 파일을 여는게 중요하기보다는, 하나를 열더라도 빨리 여는게 중요한 시점이네요..
"Success"
아닙니다
게임 엔진같이 속도가 중요한 걸 만든다면 더더욱 파일 오픈 따위의 시간을 염려하고 있으면 안됩니다. 코드는 일반적으로 성능이 좋을수록 짜는데 오래 걸리고 유지보수도 어렵습니다. 모든 API를 다 최대한 빠르게 만들겠다면 코드가 감당할 수 없을만큼 복잡해져서 죽도밥도 안됩니다. 코드가 너무 복잡해지면 나중에 정말로 성능이 중요한 부분을 발견해도 코드가 엉켜서 더이상 최적화를 할 수 없는 상태가 됩니다.
그냥 최대한 단순하게 짜놓고 나중에 게임 엔진 다 만들어진 다음에 파일 오픈 성능이 문제가 되면 그때 바꾸세요.
제가 알기론
다른 것들도 어차피 CreateFile을 호출할겁니다. 따라서 CreateFile을 직접 호출하는게 좋겠지만, 멀티플랫폼이라면 저역시 그쪽은 맨 나중에 신경쓰겠습니다. 재컴파일후 바로 쓸 수 있는 함수 위주로 사용하고 최적화는 나중에..
--
?
손으로 직접 분기문 최적화 해보겠다고 별의 별 이상한 코드(결과적으로 더 느려지는)를 다 짜던 모 씨가 생각나네요.
멀티플랫폼이면 더더욱 저수준 최적화는 신경 쓰지 말고 다른 부분에만 신경 쓰세요.
최적화가 아니라 공통적으로 쓸 수 있는 함수로 먼저 만들어야 합니다.
어차피 파일 I/O 클래스는 따로 만드실 테고, 그러면 호출부의 코드는 플랫폼이 바뀌어도 변경할 필요가 없습니다.
멀티 플랫폼 타겟 프로젝트면 보통 플랫폼 의존적인 코드는 따로 빼놓을 수 있는 구조로 만들기 때문에
더더욱 나중에 쉽게 변경 가능합니다.(그렇게 설계를 하셨다는 가정하에)
그것보다는 정말로 속도에 영향을 줄 수 있는 다른 부분에 신경을 더 쓰시길 권합니다.
댓글 달기