Windows Phone 8로 게임포팅 중 생긴 난관 – Windows Phone 8 에서 App당 사용 가능한 최대 메모리

윈폰개발은 여기까지 하려고 했는데 일단 크래시하는 원인이 너무 찜찜해서 정확히 원인을 파악하고자 열심히 디버깅을 시도.

크래시 원인이 메모리 부족인건 확실해보인다. 다만 에뮬레이터나 리얼폰이나 1GB메모리를 장착하고 있다. 메모리 부족 현상이 너무 빨리 오는것 같아서 이상하다고 생각했다.

내 코드가 CRT힙에서 할당한건 대략 60MB 정도.

버텍스버퍼,텍스쳐,인덱스 버퍼는 정확히 얼마를 썼는지 알수가 없는데 적어도 100MB는 될거고. 그럼 최소한 160MB를 소모했다는건데 페이징이 없는 모바일 환경에선 160MB로도 메모리 부족이 올 수는 있다.

일단 최대 사용 가능한 메모리가 얼마인지 찾아봤다.아래링크

http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj681682(v=vs.105).aspx

디폴트로 앱이 사용할 수 있는 메모리는 150MB가 한계.

과연…DX에서 다수의 버텍스 버퍼 개수를 할당하지 못하는게 문제라고 생각했는데 메모리 할당량 제한에 걸렸다고 보는게 맞다.

일단 이 문제를 어느 정도 피해갈 수 있는 방법이 있는데 앱매니페스트에서 ID_FUNCCAP_EXTEND_MEM를 설정해서 메모리 1GB메모리 폰 기준으로 한계 메모리를 300MB까지 확장할 수 있다고 문서에 나와있다.

iOS쪽은 정확히 얼마인지 모르겠는데 내 경험상 딱 가이드라인이 정해진건 아니고 Low-Memory 경고 받을때까진 계속 사용할 수 있었던걸로 기억한다. 찾아봐도 정확히 얼마란 얘긴 안나오네.

하여간 매니페스트 파일을 수정하고 다시 빌드. 테스트 해보니 문제가 되었던(메모리를 좀 많이 먹었던) 전투필드도 제대로 로드 된다.

결국 모든건 메모리 문제..속도는 생각만큼 느리지 않다.

램2GB폰이 나오던지 내가 리소스를 더 팍팍 줄이던지 하면 풀버젼의 클라이언트도 윈폰으로 돌릴 수는 있을것 같다. 어차피 윈폰 사용자들은 대부분 저가폰을 사용하니 뭐 이건 자기만족으로 끝날 가능성이 높지만.

아 근데..대체 윈폰에서 C++ 코드만 사용해서 내 프로세스 메모리 사용량 얻어올 방법은 없는것인가.

뭐좀 하려고 하면 다 C++에선 지원되지 않는대. 

DirectX는 C++ 네이티브로 짜라면서 시스템이나 UI관련 API는 C#만 지원하면 어쩌라고.

프로파일러도 네이티브 코드에선 매우 제한적으로 지원됨. 메모리 사용량도 안나옴.

제발 다음 버전에선 네티이브 코드 지원좀 제대로 해줬음 좋겠다.

어쨌건 이제 제대로 돌아는 간다.언제 메모리 부족으로 죽을지 몰라 겁나긴 하지만.

 6cb562b98f03a4c814f06cc11beacedb


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중