2012-12-11 33 views
5

Uygulamamın başında, belleğin belleğe yüklenmesi gereken proje klasörümde çok fazla resim var. CPU yükünü ve zamanını azaltmak için bunu yapmanın en iyi yolu nedir?Görüntüleri belleğe yüklemek için en iyi yol?

for (int i = 0; i < 10; i++) 
     { 
      var smallBitmapImage = new BitmapImage 
      { 
       UriSource = new Uri(string.Format("ms-appx:/Assets/Themes/{0}/{1}-small-digit.png", themeName, i), UriKind.Absolute) 
      }; 

      theme.SmallDigits.Add(new ThemeDigit<BitmapImage> { Value = i, BitmapImage = smallBitmapImage, Image = string.Format("ms-appx:/Assets/Themes/{0}/{1}-small-digit.png", themeName, i) }); 
     } 

Ve sonra ben bir görüntü kontrolü için bu BitmapImage bağlamak:

ben yapıyorum.

Ancak UriSource'un gerçekten görüntüyü belleğe yükleyip yüklemediğinden tam olarak emin değilim.

Ayrıca BitmapImage için SetSourceAsync özelliğini gördüm. Ama bağlamımda nasıl kullanacağımı bilmiyorum. Herkes Yanlış cevap gösterilir istemiyordu beri başka bir yanıt eklemek zorunda

Teşekkür

+0

. WinRT görüntüleri yükleme konusunda son derece temkinli görünüyor ... – satur9nine

cevap

1

.... SetSourceAsync mülkiyet veya görüntüleri yüklemek için en iyi yolu ile ya yardım edebilir 10 saniye sonra ...

Örnekler:

BitmapImage image1 = LoadImageToMemory("C:\\image.png"); 
BitmapImage image2 = LoadImageToMemory(webRequest.GetResponse().GetResponseStream()); 

public BitmapImage LoadImageToMemory(string path) 
{ 
     BitmapImage image = new BitmapImage(); 

     try 
     { 
      image.BeginInit(); 
      image.CacheOption = BitmapCacheOption.OnLoad; 
      System.IO.Stream stream = System.IO.File.Open(path, System.IO.FileMode.Open); 
      image.StreamSource = new System.IO.MemoryStream(); 
      stream.CopyTo(image.StreamSource); 
      image.EndInit(); 

      stream.Close(); 
      stream.Dispose(); 
      image.StreamSource.Close(); 
      image.StreamSource.Dispose(); 
     } 
     catch { throw; } 

     return image; 
} 

// Veya System.Net.WebRequest() GetResponse() GetResponseStream()

kullanmak.. Eğer System.Drawing ad kullanmak durumunda 0
+0

Ben bir fark ekledim yanlış olduğunu anladım ben sadece düzeltmek için yazacağım, bu örnek çalışır ve daha önce değil. – Deukalion

+0

Hey cevabı için teşekkürler, ama ne yazık ki bu WInRT uygulaması için değil, sadece WPF uygulaması için çalışıyor. "System.Windows.Media.Imaging" içinde yer alan BitmapImage u, ancak WinRT uygulamaları için BitmapImage "Windows.UI.Xaml.Media.Imaging" içinde. Ve StreamSource gibi tüm özellikler WinRT sürüm – Bitsian

+0

kullanılabilir değil WinRT http://msdn.microsoft.com/library/windows/apps/BR243235 kullanılabilir tüm özellikler için bu bağlantıya başvurabilirsiniz – Bitsian

0

, bir akıştan bir görüntü başlatmak daha kolaydır: Ben de aynı sorun var

try 
{ 
    var req = WebRequest.Create(photoUrl); 

    using (var response = req.GetResponse()) 
    { 
    using (var stream = response.GetResponseStream()) 
    { 
     if (stream != null) 
     { 
     var image = Image.FromStream(stream); 
     } 
    } 
    } 
} 
catch (Exception ex) 
{ 
    // handle exception 
} 
İlgili konular