Tôi đã làm việc trên một ứng dụng WP7, đó là ứng dụng thư viện hình ảnh, với các thao tác thu phóng cơ bản và thao tác vuốt được triển khai.Không thể tìm thấy rò rỉ bộ nhớ
Vì mục đích thử nghiệm, tôi đã biên dịch ứng dụng bằng hình ảnh ngoại tuyến (tên tệp của chúng được đánh số) được đặt thành Nội dung và truy cập chúng qua chuỗi được mã hóa cứng (sẽ được thay thế sau).
Nhưng nhận ra rằng ứng dụng tiêu thụ rất nhiều bộ nhớ. Tôi nghĩ đó là do hình ảnh và tìm thấy this blog; hình ảnh luôn được lưu vào bộ nhớ cache. Tôi đã sử dụng mã từ blog để khắc phục điều này. Vẫn còn bộ nhớ không được phát hành, mặc dù tỷ lệ tiêu thụ đã giảm xuống.
Để cố gắng cuối cùng, tôi đã tạo một ứng dụng thử nghiệm khác với nút tính năng cơ bản 2 để điều hướng và điều khiển hình ảnh cho hình ảnh, chỉ để đảm bảo đó không phải là mã cử chỉ của tôi.
Đây là XAML
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Grid.Row="0" x:Name="ImageHolder" Height="Auto" Width="Auto" Stretch="Uniform" Tap="image_Tap" />
<TextBlock x:Name="MemUsage" />
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button x:Name="PrevButton" Content="Prev" Width="240" Click="btnPrev_Click"/>
<Button x:Name="NextButton" Content="Next" Width="240" Click="btnNext_Click"/>
</StackPanel>
</Grid>
Đây là cs nộp
const int PAGE_COUNT = 42;
int pageNum = 0;
public MainPage()
{
InitializeComponent();
RefreshImage();
}
private void btnPrev_Click(object sender, RoutedEventArgs e)
{
pageNum = (PAGE_COUNT + pageNum - 1) % PAGE_COUNT; // cycle to prev image
RefreshImage();
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
pageNum = (PAGE_COUNT + pageNum + 1) % PAGE_COUNT; // cycle to next image
RefreshImage();
}
private void image_Tap(object sender, GestureEventArgs e)
{
RefreshTextData();
}
private void RefreshImage()
{
BitmapImage image = ImageHolder.Source as BitmapImage;
ImageHolder.Source = null;
if (image != null)
{
image.UriSource = null;
image = null;
}
ImageHolder.Source = new BitmapImage(new Uri("000\\image" + (pageNum + 1).ToString("D3") + ".jpg", UriKind.Relative));
RefreshTextData();
}
private void RefreshTextData()
{
MemUsage.Text = "Device Total Memory = " + (long)DeviceExtendedProperties.GetValue("DeviceTotalMemory")/(1024 * 1024)
+ "\nCurrent Memory Usage = " + (long)DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage")/(1024 * 1024)
+ "\nPeak Memory Usage = " + (long)DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage")/(1024 * 1024);
}
Nhưng vẫn rò rỉ bộ nhớ là có và tôi không thể ghim điểm nó. Tôi đang gặp khó khăn trong việc tìm kiếm nó. Bộ nhớ hồ sơ cho thấy rằng tôi có nhiều trường hợp của một chuỗi, và tôi không thể giải thích điều đó.
Ít điểm:
- tôi có hình ảnh trong một thư mục "000" và đặt tên là "hình ảnh ###". Hiện tại tôi có hình ảnh có tên tệp từ "image001" đến "image042"
- Ứng dụng thử nghiệm có dung lượng bộ nhớ 6 MB ngay khi hiển thị trang đầu tiên hoàn toàn bằng hình ảnh và sau khi trang thay đổi tăng lên gần như 18-20 MB
- Kết quả thay đổi trang tiếp theo khi tăng dần bộ nhớ và sau đó xảy ra sự cố, nếu số lượng hình ảnh cho phép, nếu không sau khi đi xe đạp qua tất cả mức tiêu thụ bộ nhớ hình ảnh là không đổi
- Tôi đang sử dụng tệp .jpg với kích thước khoảng 1280 x 2000, để thử nghiệm tôi không thay đổi kích thước hình ảnh.
Bạn có sinh ra một chuỗi phụ cho mỗi hình ảnh được hiển thị để hiển thị nó không? Bạn có 1918 đối tượng chủ đề xung quanh. Điều đó không có vẻ lành mạnh. Tìm hiểu cách bạn tạo các chủ đề và chấm dứt chúng đúng cách để các tài nguyên liên quan được tham chiếu bằng phương thức thread có thể được phát hành. –
@ Alois, tôi không phải là một chuyên gia, chỉ là một nhà phát triển hobbyist. Tôi thực sự không biết mình đang vô tình tạo chủ đề ở đâu. Tôi không tạo bất kỳ chủ đề nào một cách rõ ràng. Tôi thậm chí không biết, đó thực sự là một vấn đề. Những gì tôi có thể nói rằng những gì bạn đang thấy là toàn bộ mã của ứng dụng mẫu của tôi. Vì vậy, có lẽ nếu bạn có thể tạo lại nó có một cái nhìn vào nó. Sẽ hữu ích. –