STL/CLR 대실망

  • Post author:
  • Post category:
  • Post comments:0 Comments
  • Post last modified:March 10, 2008

Visual Studio 2008부터 쓸 수 있게 된 STL/CLR. 기대에는 못 미친다는 걸 알게 됐다. 문제가 무엇인고 하니, 바로 성능이 떨어진다는 것이다. 조금 떨어지는 것이라면 참고 쓸 수도 있겠만, 이건 정도가 심하다. A look at STL/CLR performance for linear containersC++/CLI in Action의 저자인 Nishant Sivakumar가 쓴 글인데, 뭐가 문제인지 잘 설명해놨다.

닷넷 프레임워크에 제공되는 기본 컨테이너를 두고 몇 배씩 쳐지는 성능을 감내할 이유가 있을까 싶다. 결국 잠깐 STL/CLR을 써볼까 했다가 이 글을 읽고 관두기로 했다.

댓글을 읽어보면 몇 가지 의문점을 지적하는데, 나 역시 미련을 못 버리고 직접 테스트를 해봤다. 우선 BCL 컨테이너는 ngen으로 미리 컴파일해 놓은 상태라 공정하지 못한 테스트다라는 지적을 검토해보고자, 기사에 나온 테스트 코드를 직접 돌려봤다. VectorInsertRemoveGenericListInsertRemove를 각각 10만 번씩 돌린 후, 다시 10만 번씩 돌렸다. 처음 10만번 돌린 것은 Just in Compile이 될 기회를 준 것이다. 이렇게 하면 두 번째 돌렸을 때 공정한 결과를 얻을 수 있다. 테스트 결과는 역시나 Nishant Sivakumar의 말이 맞다는 걸 입증할 뿐이었다. 이 정도 내공을 가진 저자가 이런 초보적인 실수를 했으리라 생각하는 것 자체가 우습긴 하다.

두 번째 지적은 Checked Iterators를 쓴 게 아니냐라는 문제 제기였다. Visual Studio 2005부터 릴리즈 빌드를 할 때조차 기본적으로 Checked Iterators를 쓰게 설정되어 있다는 걸 이번 기회에 알게 되어 소득이 있었지만, 역시나 이 문제도 아니었다. Checked Iterator 설정을 꺼봤지만 결과는 마찬가지였다.

네이티브 C++ 개발자가 CLR 세상에 발을 들여놓기 쉽게 해주려는 시도는 좋았지만, 성능 차이가 이렇게 많이 나서는 역시 못 써먹겠다.

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments