Im은 Zune의 특정 그림 앨범에서 그림을 표시하는 XNA 프로그램을 작성합니다. 문제는 앨범의 모든 그림에서 텍스처를로드하면 프로그램이 메모리가 부족한 경우입니다. 내가 하나씩 로딩을 시도하고 사용자가 다음 그림으로 이동하면 이전 그림 텍스처에 Dispose를 호출합니다. 이것은 작동하지만 그때 나는 사용자가 프로그램을 다시 시작하지 않고도 과거의 그림을 볼 수 없도록 삭제되면 이전 그림에서 텍스처를 되 찾을 수 없습니다!메모리가 부족한 상태에서 Zune XNA에서 사진을로드하는 방법은 무엇입니까?
답변
앨범의 항목 당 텍스처 핸들을 저장하지 마십시오. 대신 사용자가 앨범을 탐색 할 때 필요한대로 처 리하고로드하는 단일 프로그램 수준 핸들을 사용하십시오.
그래, 뭐하는거야. 나는 언제나 하나의 그림 텍스처를 참조하는 텍스처 핸들이 하나 밖에 없다. 그러나 그림에서 텍스처에 액세스하면 다른 텍스처를 핸들에 할당하더라도 텍스처가 사라지지 않습니다. 어딘가에 캐싱 된 것 같습니다. 텍스처에 Dispose를 호출하면 그림에서 텍스처를 다시 가져올 수 없습니다. 그것은 GetTexture를 호출 할 때마다 null을 반환합니다. – anonymous
몇 가지 코드를 게시 할 수 있습니까? 텍스처에 문제가 있습니까? 나는. 다음 파일을로드 할 때 파일 잠금을 지우지 않고 이전 파일을 다시로드하지 못하도록합니까? – GalacticCowboy
Thx가 너무 유용합니다! 사진을 XNA 프로젝트에 첨부해야하고 XNB 파일로 함께 컴파일해야하므로 실제로 코드를 변경했습니다. 이제 ContentManagers를 사용하여 사진을로드하거나 언로드 할 수 있기 때문에 작동합니다. 그러나 그림을 추가, 제거 또는 변경해야 할 경우 전체 프로그램을 다시 컴파일하고 배포해야하기 때문에 이것은 좋은 해결책이 아닙니다! 지금은 시간이 없지만 주말에는 문제를 재현하고 코드를 게시하는 작은 프로그램을 작성합니다. – anonymous
모든 데이터 처리를 한 번하고 파일 이름을 저장하면 모든 계층 구조/정렬을 한 번만 수행하면됩니다. 그런 다음 원하는 때에 사진을로드하십시오 (정확하게 이전 게시물이 제안한 것).
Content.Load (string)가 텍스처를로드하지만 텍스처에 대한 모든 포인터가 손실되는 경우 ContentManager는 메모리에 텍스처를 유지하므로 다시로드하면 즉시로드됩니다. . 이러한 캐시 아이템을 드롭하는 방법 Content.Unload()가있다, 참조 :
이 주제에 대한 포럼 토론 :
http://forums.xna.com/forums/p/25978/141761.aspx
숀 하그리브스는 설명 :
http://blogs.msdn.com/shawnhar/archive/2006/09/06/743437.aspx
방법 I을 이 기능은 그림을 사용하지 않을 때마다 언로드를 호출하거나 빠른 로딩을 원할 경우 구현됩니다 (사용자가 그림을 변경하는 빈도에 따라 다름). 나쁜 생각) 메모리 예외를 잡으려고 시도하고 언로드 만 호출 en.
도움을 요청한 Thx! 네, 각 텍스쳐마다 별도의 ContentManager를 사용합니다. 그렇게해야만 언로드 할 수 있습니다. 그러나 Zune Picture API는 ContentManager를 사용하거나 노출하지 않아서로드 및 언로드를 제어 할 수 없습니다. GetTexture라는 메서드가 하나뿐입니다. 그것은 일반적인 Content.Load 패턴을 사용하지 않습니다! 그것이 내가 너무 좌절 한 이유입니다! :-( – anonymous
아, 나는 그것이 zune에서 상당히 달랐다는 것을 깨닫지 못했습니다.MSDN을 약간 읽으면 (그림은 완전한 추측입니다.) 그림 (텍스처가 아니라 GetTexture라고하는 그림)에서 처리를 호출 할 수 있고 그림이 사용하는 모든 관리되지 않는 리소스가 해제되어야합니다. 그 질감) – Martin
- 1. 메모리가 부족한 상태에서 임의 크기의 비트 맵 표시
- 2. 비트 맵을 다운로드하고 메모리가 부족한 상태에서 SD 카드에 저장하려면 어떻게해야합니까?
- 3. 메모리가 부족한 상태에서 C++로 메모리를 올바르게 할당하는 방법
- 4. 메모리가 부족한 시스템의 어레이
- 5. 마일스톤의 메모리가 부족한 상태에서 Android 시스템에 의해 프로세스가 중단되는 것을 방지하는 방법은 무엇입니까?
- 6. 메모리가 부족한 파일 세트가있는 Ant XSLT 작업
- 7. 프로그램 메모리가 부족한 것처럼 보이게하려면 어떻게합니까?
- 8. 자바에서 JPEG 코덱을 사용하여 사진을로드하는 방법은 무엇입니까?
- 9. 왜 iPhone 앱의 메모리가 부족한 지 알 수 없습니다.
- 10. C 메모리 할당 : 메모리가 부족한 이유 (250K 만 해당)
- 11. 문서가 부족한 이유는 무엇입니까?
- 12. ABPeoplePickerNavigationController에서 '추가'버튼이 부족한 상황을 해결하는 방법은 무엇입니까?
- 13. 아이폰 스피커가 부족한 오디오를 녹음하는 방법은 무엇입니까?
- 14. XNA에서 런타임 게임 플랫폼 감지하기
- 15. xna에서 직교 뷰를 정의하는 방법은 무엇입니까?
- 16. xna에서 C#으로 색상을 지정하는 방법은 무엇입니까?
- 17. WP7 XNA에서 HorizontalDrag의 방향을 감지하는 방법은 무엇입니까?
- 18. XNA에서 2D 픽셀을 그리는 방법은 무엇입니까?
- 19. XNA에서 픽셀 데이터를 가져오고 설정하는 방법은 무엇입니까?
- 20. XNA에서 객체를 움직여서 흔들리지 않도록하는 방법은 무엇입니까?
- 21. XNA에서 특정 색상의 원을 그리는 방법은 무엇입니까?
- 22. XNA에서 게시가 게시보다 빠릅니다 이유는 무엇입니까?
- 23. YouTube를 사용하여 Zune 용 Podcast를 만드는 방법은 무엇입니까?
- 24. 로딩 시간에 폴더에서 사진을로드하는 중
- 25. Zune HD 개발 제한
- 26. Zune Player api
- 27. Zune HD 네트워킹
- 28. Winform XNA에서 건물 내용
- 29. XNA에서 쉐이더 효과를 사용하는 방법
- 30. Windows CE에서 혁신과 Silverlight가 부족한 이유는 무엇입니까?
동일한 논리를 사용하여 왜 다시로드하지 않는 것이 좋습니까? – GalacticCowboy
음 그림 모음집에는 그림을 모두 가져와야하므로 그림을 순서대로 정렬해야 사용자에게 보여줄 수 있습니다. 사용자가 과거 단추를 눌러 과거 사진을 볼 때마다이 작업을 수행하는 것이 좋습니다. 확실히 더 나은 해결책이 있습니까? – anonymous