2010-07-09 2 views
3

나는 이미지를 목록 상자에 보여주는 간단한 사진 갤러리 응용 프로그램을 만들고 있습니다. xaml은 다음과 같습니다.WPF 성능

<ListBox x:Name="imageList" Margin="10,10" ItemsSource="{Binding}" Height="500"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding}" HorizontalAlignment="Left"></TextBlock> 
        <Image Source="{Binding}" Width="100" Height="100" HorizontalAlignment="Center"></Image> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

여기에 설정된 DataContext는 JPEG 이미지 파일 경로의 문자열 []입니다.

총 크기가 11MB 인 10-11 개의 이미지를 사용할 때 총 메모리 사용량은 최대 500MB가됩니다 !!! 이 앱은 아무것도하지 않는 간단한 사진보기 앱이므로 정말 놀랍습니다. 이 응용 프로그램을 실행하면 내 컴퓨터를 사용할 수 없게됩니다.

Vista에서 VS 2010 express, .NET 4를 사용하고 있습니다. 어느 누구도 엄청난 메모리 사용량을 요구하는 백그라운드에서 무슨 일이 일어나는지 설명해 주실 수 있습니까? 그리고 그것을 최적화하기 위해 무엇을 할 수 있습니까?

미리 감사드립니다. 다른 키를

그렇게 변환기를 통해 이미지를 결합 BitmapImage

의 decodepixelwidth 필드 수 있습니다

+0

배경에서 무슨 일이 일어나고 있는지는 게시 한 Xaml과 관련이 거의 없습니다. 이미지를로드하는 코드를 게시 할 수 있습니까? –

+0

예. 데이터 컨텍스트를 설정하는 버튼이 있습니다. 버튼 클릭시 코드는 다음과 같습니다. string [] files = Directory.GetFiles (@ "C : \ wpf_test"); this.DataContext = files; 코드에는 다른 것이 없습니다. – thewpfguy

답변

2

하나 여기에 키가 가상화 될 수는 ..., 이미지의 덜 memoryintense 디코딩 변형을 반환 ...

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.decodepixelwidth.aspx

또한 당신은 Dispose of Image in WPF in Listbox (memory leak) 주사를 수 있습니다!

+0

감사 산타. 나는 변환기를 살펴볼 것이다. 나는 가상화를 확인했다. 사실 2 개의 이미지 만 볼 수 있도록 목록 상자의 높이를 줄이면 초기 메모리 사용량은 144 MB이고 모든 다운 스크롤 (다음 두 이미지 표시) 메모리는 40 MB 증가한다. – thewpfguy

+1

감사합니다. 난 그냥 DeocodePixelWidth 함께 시도하고 아주 잘 작동합니다. – thewpfguy

+0

당신을 환영합니다 :-) – santa

1

압축 된 이미지를로드 할 때 (그리고 JPEG가 매우 압축되어있을 수 있음)로드 된 상태로 유지하는 데 필요한 메모리는 거의 항상 압축되지 않은 상태를 기반으로한다는 것을 잊지 마십시오.

파일 크기를보고 메모리에 대해 생각하면 오해의 소지가 있습니다. 이미지 픽셀 크기를 살펴보아야합니다. 길이 x 너비 x 4로 시작하여 대략적인 규칙으로 생각한 다음 다시 검토하십시오. 메모리 사용은 너무 터무니 없습니다.

+0

정말 고마워요. 방금 jpeg의 두 배인 .bmp로 테스트를했는데 그 결과는 놀랍습니다. 스냅에로드 된 이미지뿐만 아니라 UI (스크롤링)도보다 반응적입니다. 추가하기 만하면 WinForms에서 동일한 테스트를 수행했으며 그 결과는 비슷하므로 WPF 문제는 아닙니다. -> 전체 사진을 찍은 포토 갤러리 앱이 어떻게하는지 궁금합니다. – thewpfguy