Performansı İyileştirme: 2B Grafikleri ve Görüntüleme

WPF, uygulama gereksinimleriniz için iyileştirilmiş çok çeşitli 2B grafik ve görüntüleme işlevleri sağlar. Bu konu, bu alanlarda performans iyileştirmesi hakkında bilgi sağlar.

Çizim ve Şekiller

WPF, grafik çizim Drawing içeriğini temsil etmek için hem hem de nesneleri Shape sağlar. Ancak, Drawing nesneler nesnelerden daha basit Shape yapılardır ve daha iyi performans özellikleri sağlar.

, Shape ekrana grafiksel bir şekil çizmeye olanak sağlar. Bunlar sınıfından FrameworkElement türetilen nesneler Shape panellerin ve çoğu denetimin içinde kullanılabilir.

WPF, grafik ve işleme hizmetleri için çeşitli erişim katmanları sunar. Üst katmanda nesnelerin Shape kullanımı kolaydır ve düzen ve olay işleme gibi birçok kullanışlı özellik sağlar. WPF, bir dizi kullanıma hazır şekil nesnesi sağlar. Tüm şekil nesneleri sınıfından Shape devralınır. Kullanılabilir şekil nesneleri Ellipse , , , , ve LinePathPolygonPolylineRectangle nesneleridir.

Drawing nesneleri ise sınıfından türetmez ve şekilleri, resimleri ve metinleri işlemeye yönelik daha FrameworkElement hafif bir uygulama sağlar.

Dört tür nesne Drawing vardır:

nesnesi GeometryDrawing geometri içeriğini işlemek için kullanılır. sınıfı ve bundan türeyen , ve gibi somut GeometryCombinedGeometryEllipseGeometry sınıflar, 2B grafikleri işlemenin yanı sıra isabet testi ve kırpma desteği PathGeometry sağlar. Geometri nesneleri, örneğin bir denetimin bölgesini tanımlamak veya bir görüntüye uygulanacak kırpma bölgesini tanımlamak için kullanılabilir. Geometri nesneleri dikdörtgenler ve daireler gibi basit bölgeler veya iki veya daha fazla geometri nesnesinden oluşturulan bileşik bölgeler olabilir. , ve gibi türetilmiş nesneler birleştirerek PathSegment daha karmaşık geometrik ArcSegment bölgeler BezierSegmentQuadraticBezierSegment oluşturulabilir.

Yüzeyde, Geometry sınıfı ve Shape sınıfı benzerdir. Her ikisi de 2B grafiklerin işlemesinde kullanılır ve her ikisi de, ve gibi onlardan türeten benzer somut sınıflara EllipseGeometryEllipse sahiptir. Ancak, bu iki sınıf kümesi arasında önemli farklar vardır. İlk olarak, sınıfının kendisini çizme gibi bazı işlevleri GeometryShape yoktur. Bir geometri nesnesi çizmek için drawing işlemini gerçekleştirmek için DrawingContext, Drawing veya Path gibi başka bir sınıf kullanılmalıdır (Yol bir Şekildir) kullanılmalıdır. Dolgu, darbe ve darbe kalınlığı gibi işleme özellikleri, bir şekil nesnesi bu özellikleri içerirken geometri nesnesini çizen sınıftadır. Bu farkı düşünmenin bir yolu, geometri nesnesinin bir bölgeyi ,örneğin daireyi, şekil nesnesinin bölgeyi, bu bölgenin nasıl doldurulması ve ana hatlarını tanımladığı ve düzen sistemine katıldığıdır.

Nesneler Shape sınıfından FrameworkElement türetildiklerinden, bunları kullanmak uygulamanıza önemli ölçüde daha fazla bellek tüketimi ekleyebilir. Grafik içeriğiniz için FrameworkElement özelliklere gerçekten ihtiyacınız yoksa, daha hafif nesneleri kullanmayı göz önünde Drawing bulundurabilirsiniz.

Nesneler hakkında daha fazla Drawing bilgi için bkz. Drawing

StreamGeometry Nesneleri

nesnesi, StreamGeometry geometrik şekiller oluşturmak için PathGeometry basit bir alternatiftir. Karmaşık StreamGeometry bir geometriyi açıklamaya ihtiyacınız olduğunda kullanın. StreamGeometry , birçok nesne için PathGeometry iyileştirilmiştir ve tek tek birçok nesne kullanımına kıyasla daha iyi PathGeometry performans gösterir.

Aşağıdaki örnek, XAML'de üçgen oluşturmak için StreamGeometry öznitelik söz dizimi kullanır.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>
  
    <Path Data="F0 M10,100 L100,100 100,50Z" 
      StrokeThickness="1" Stroke="Black"/>

  </StackPanel>
</Page>

Nesneler hakkında daha fazla StreamGeometry bilgi için StreamGeometry

DrawingVisual Nesneleri

nesnesi DrawingVisual şekilleri, resimleri veya metinleri işlemek için kullanılan basit bir çizim sınıfıdır. Bu sınıf, performansını geliştiren düzen veya olay işleme sağlamayarak basit olarak kabul edilir. Bu nedenle, çizimler arka planlar ve küçük resim için idealdir. Daha fazla bilgi için bkz. DrawingVisual Nesnelerini Kullanma.

Görüntüler

WPF görüntüleme, önceki sürümlerde görüntüleme özelliklerine göre önemli bir Windows. Bit eşlem görüntüleme veya ortak denetimde görüntü kullanma gibi görüntüleme özellikleri öncelikli olarak Microsoft Windows Grafik Cihaz Arabirimi (GDI) veya Microsoft Windows GDI+ uygulama programlama arabirimi (API) tarafından işleniyordu. Bu API'ler temel görüntüleme işlevselliği sağlarken codec genişletilebilirliği ve yüksek güvenilirlikli görüntü desteği gibi özelliklere sahip değildir. WPF Imaging API'leri, GDI ve GDI+ eksikliklerinin üstesinden gelmek ve uygulamalarınız içinde görüntüleri görüntülemek ve kullanmak için yeni bir API kümesi sağlamak üzere yeniden tasarlanmıştır.

Görüntüleri kullanırken daha iyi performans elde etmek için aşağıdaki önerileri göz önünde bulundurabilirsiniz:

  • Uygulamanıza küçük resim görüntüleri görüntülemeniz gerekirse görüntünün azaltılmış boyutlu bir sürümünü oluşturmayı göz önünde bulundurabilirsiniz. Varsayılan olarak, WPF görüntülerinizi yükler ve görüntünün kodunu tam boyutuna ayarlar. Görüntünün yalnızca küçük resim sürümünü almak istemiyorsanız, WPF gereksiz bir şekilde görüntünün tam boyutunun kodunu çözer ve ardından küçük resim boyutuna ölçeklendirin. Bu gereksiz ek yükü önlemek için WPF'den görüntünün kodunu küçük resim boyutuna çözmesi veya WPF'den küçük resim boyutu görüntüsü yüklemesi istenir.

  • Varsayılan boyuta değil, her zaman görüntünün kodunu istediğiniz boyuta çözebilirsiniz. Yukarıda belirtildiği gibi WPF'den görüntünizin kodunu varsayılan tam boyuta değil istenen boyuta çözmesi istenir. Yalnızca uygulamanın çalışma kümesi değil yürütme hızını da azaltabilirsiniz.

  • Mümkünse, görüntüleri birden çok görüntüden oluşan bir film şeridi gibi tek bir görüntüde birleştirin.

  • Daha fazla bilgi için bkz. Görüntülemeye Genel Bakış.

Bitmapscalingmode

Herhangi bir bit eşlem ölçeğine animasyon eklerken, varsayılan yüksek kaliteli görüntü yeniden örnekleme algoritması bazen kare hızı düşüşüne neden olmak için yeterli sistem kaynaklarını tüketerek animasyonların bozulmasına neden olabilir. nesnesinin BitmapScalingMode özelliğini olarak RenderOptions ayarlayan LowQuality bir bit eşlem ölçeklendirken daha sorunsuz bir animasyon oluşturabilirsiniz. LowQuality modu, WPF işleme altyapısına görüntüleri işlerken kalite için iyileştirilmiş algoritmadan hız için iyileştirilmiş algoritmaya geçmelerini söyler.

Aşağıdaki örnekte, bir görüntü nesnesi için BitmapScalingMode 'nin nasıl ayar olduğu gösterir.

// Set the bitmap scaling mode for the image to render faster.
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality);
' Set the bitmap scaling mode for the image to render faster.
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality)

CachingHint

Varsayılan olarak, WPF ve gibi nesnelerin işlenmiş TileBrush içeriklerini önbelleğe DrawingBrushVisualBrush alınmaz. Sahnenin içeriğinin veya kullanımının değişmeye devam ettiği statik senaryolarda, video belleğini tasarruf ettiği TileBrush için bu mantıklıdır. Statik içeriğe sahip bir statik olmayan bir şekilde (örneğin, bir statik veya dönen 3D nesnesinin yüzeyiyle eşlenmiş olduğunda) o kadar anlamlı TileBrushDrawingBrushVisualBrush değildir. WPF'nin varsayılan davranışı, içerik değişmese bile her kare için veya DrawingBrushVisualBrush içeriğinin tamamını yeniden işlemektir.

nesnesinin CachingHint özelliğini olarak RenderOptionsCache ayarerek, kutucuklı fırça nesnelerinin önbelleğe alınmış sürümlerini kullanarak performansı artırabilirsiniz.

ve özellik değerleri, ölçek değişiklikleri nedeniyle nesnenin ne zaman yeniden oluşturulması gerektiğini CacheInvalidationThresholdMinimumCacheInvalidationThresholdMaximum belirleyen göreli boyut TileBrush değerleridir. Örneğin, özelliği 2.0 olarak ayarsanız, geçerli önbelleğin boyutunun iki katını aşarsa yalnızca önbelleğin yeniden CacheInvalidationThresholdMaximumTileBrush oluşturulması gerekir.

Aşağıdaki örnekte, bir için önbelleğe alma ipucu seçeneğinin nasıl olduğu DrawingBrush gösterir.

DrawingBrush drawingBrush = new DrawingBrush();

// Set the caching hint option for the brush.
RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache);

// Set the minimum and maximum relative sizes for regenerating the tiled brush.
// The tiled brush will be regenerated and re-cached when its size is
// 0.5x or 2x of the current cached size.
RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5);
RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0);
Dim drawingBrush As New DrawingBrush()

' Set the caching hint option for the brush.
RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache)

' Set the minimum and maximum relative sizes for regenerating the tiled brush.
' The tiled brush will be regenerated and re-cached when its size is
' 0.5x or 2x of the current cached size.
RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5)
RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0)

Ayrıca bkz.