Aracılığıyla paylaş


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

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

Çizim ve Şekiller

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

A Shape , ekrana grafik bir şekil çizmenizi sağlar. Sınıftan FrameworkElement türetildiklerinden, Shape nesneler panellerin ve çoğu denetimin içinde kullanılabilir.

WPF, grafiklere ve işleme hizmetlerine çeşitli erişim katmanları sunar. Üst katmanda, Shape nesnelerin 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 devralır Shape . Kullanılabilir şekil nesneleri : Ellipse, Line, PathPolygon, , Polylineve Rectangle.

Drawing nesneleri ise sınıfından FrameworkElement türetilmemiştir ve şekilleri, resimleri ve metinleri işlemek için daha hafif bir uygulama sağlar.

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

GeometryDrawing Nesnesi, geometri içeriğini işlemek için kullanılır. sınıfı Geometry ve öğesinden türetilen , EllipseGeometryve PathGeometrygibi CombinedGeometrysomut sınıflar, 2B grafikleri işlemek ve isabet testi ve kırpma desteği sağlamak için bir araç sağlar. Geometri nesneleri, örneğin denetimin bölgesini tanımlamak veya görüntüye uygulanacak küçük resim 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 QuadraticBezierSegmentgibi ArcSegmentBezierSegmenttüretilmiş nesneler birleştirilerek PathSegmentdaha karmaşık geometrik bölgeler oluşturulabilir.

Yüzeyde, Geometry sınıfı ve Shape sınıfı benzerdir. Her ikisi de 2B grafiklerin işlenmesinde kullanılır ve her ikisi de bunlardan türetilen benzer somut sınıflara sahiptir, örneğin EllipseGeometry ve Ellipse. Ancak, bu iki sınıf kümesi arasında önemli farklar vardır. Birincisi, sınıfın Geometry kendisini çizme yeteneği gibi bazı işlevleri Shape yoktur. Geometri nesnesi çizmek için, çizim işlemini gerçekleştirmek için DrawingContext, Drawing veya Path gibi başka bir sınıfın (Bir Yol bir Şekil olduğunu belirtmek gerekir) kullanılması gerekir. Dolgu, vuruş ve vuruş kalınlığı gibi işleme özellikleri geometri nesnesini çizen sınıfta yer alırken, şekil nesnesi bu özellikleri içerir. Bu farkı düşünmenin bir yolu, geometri nesnesinin bir bölgeyi, örneğin bir daireyi tanımlaması, şekil nesnesinin bir bölgeyi tanımlaması, bu bölgenin nasıl doldurulduğunu ve ana hatlarını belirlemesi ve düzen sistemine katılmasıdır.

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

Nesneler hakkında Drawing daha fazla bilgi için bkz . Çizim Nesnelerine Genel Bakış.

StreamGeometry Nesneleri

StreamGeometry nesnesi, geometrik şekiller oluşturmaya yönelik basit bir alternatiftirPathGeometry. Karmaşık bir StreamGeometry geometriyi tanımlamanız gerektiğinde kullanın. StreamGeometry birçok nesneyi işlemek için en iyi duruma getirilmiştir ve çok PathGeometry sayıda nesnenin PathGeometry kullanımıyla karşılaştırıldığında daha iyi performans gösterir.

Aşağıdaki örnek, XAML'de üçgen StreamGeometry oluşturmak için öznitelik söz dizimini 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 StreamGeometry daha fazla bilgi için bkz . StreamGeometry Kullanarak Şekil Oluşturma.

DrawingVisual Nesneleri

DrawingVisual nesnesi, ş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ğlamadığından basit olarak kabul edilir. Bu nedenle çizimler arka planlar ve küçük resimler için idealdir. Daha fazla bilgi için bkz . DrawingVisual Objects kullanma.

Görüntüler

WPF görüntüleme, Windows'un önceki sürümlerindeki görüntüleme özellikleri üzerinde önemli bir geliştirme sağlar. 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şlenir. Bu API'ler temel görüntüleme işlevselliği sağlasa da codec genişletilebilirliği desteği ve yüksek aslına uygunluk görüntü desteği gibi özelliklere sahip değil. WPF Görüntüleme API'leri, GDI ve GDI+ eksikliklerinin üstesinden gelmek ve uygulamalarınızda görüntüleri görüntülemek ve kullanmak için yeni bir API kümesi sağlamak için 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 bulundurun:

  • Uygulamanız küçük resim görüntülerini görüntülemenizi gerektiriyorsa, resmin küçültülmüş boyutlu bir sürümünü oluşturmayı göz önünde bulundurun. Varsayılan olarak WPF görüntünüzü yükler ve tam boyutuna çözer. Görüntünün yalnızca küçük resim sürümünü istiyorsanız, WPF gereksiz şekilde resmin kodunu tam boyutuna çözer ve sonra küçük resim boyutuna ölçeklendirir. Bu gereksiz ek yükü önlemek için WPF'nin görüntünün kodunu küçük resim boyutuna çözmesini isteyebilir veya WPF'nin küçük resim boyutu görüntüsünü yüklemesini isteyebilirsiniz.

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

  • 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ğini canlandırırken, varsayılan yüksek kaliteli görüntü yeniden örnekleme algoritması bazen kare hızının düşmesine neden olmak için yeterli sistem kaynaklarını tüketerek animasyonların etkili bir şekilde takılmasına neden olabilir. nesnesinin BitmapScalingModeRenderOptions özelliğini olarak LowQualityayarlayarak bit eşlem ölçeklendirirken daha yumuşak bir animasyon oluşturabilirsiniz. LowQuality modu WPF işleme altyapısına görüntüleri işlerken kalite için iyileştirilmiş bir algoritmadan hız için iyileştirilmiş bir algoritmaya geçiş yapmalarını söyler.

Aşağıdaki örnekte bir görüntü nesnesi için öğesinin BitmapScalingMode nasıl ayarlanacağı gösterilmektedir.

// 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)

Önbelleğe Alma Hint

Varsayılan olarak, WPF ve VisualBrushgibi DrawingBrush nesnelerin işlenmiş içeriğini TileBrush önbelleğe almaz. Sahnedeki içeriğinin veya kullanımının TileBrush değişmediği statik senaryolarda, video belleğinden tasarruf ettiğinden bu mantıklıdır. Statik içeriğe sahip bir TileBrush öğesinin statik olmayan bir şekilde kullanılması (örneğin, bir statik DrawingBrush veya VisualBrush dönen bir 3B nesnenin yüzeyine eşlendiğinde) çok anlamlı değildir. WPF'nin varsayılan davranışı, içerik değişmese bile veya içeriğinin DrawingBrushVisualBrush tamamını her kare için yeniden işlemektir.

nesnesinin CachingHintRenderOptions özelliğini olarak Cacheayarlayarak, kutucuklu fırça nesnelerinin önbelleğe alınmış sürümlerini kullanarak performansı artırabilirsiniz.

CacheInvalidationThresholdMinimum ve CacheInvalidationThresholdMaximum özellik değerleri, ölçek değişiklikleri nedeniyle nesnenin TileBrush ne zaman yeniden oluşturulacaklarını belirleyen göreli boyut değerleridir. Örneğin, özelliğini 2.0 olarak ayarlayarak CacheInvalidationThresholdMaximum , yalnızca için önbelleğin boyutu geçerli önbelleğin TileBrush boyutunun iki katını aştığında yeniden oluşturulmalıdır.

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

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.