WPF 3B Performansını En Üst Düzeye Çıkarma
3B denetimler oluşturmak ve uygulamalarınıza 3B sahneler eklemek için Windows Presentation Foundation'ı (WPF) kullanırken performans iyileştirmeyi göz önünde bulundurmanız önemlidir. Bu konu, uygulamanız için performans etkileri olan 3B sınıfların ve özelliklerin bir listesini ve bunları kullanırken performansı iyileştirmeye yönelik önerileri sağlar.
Bu konu, Windows Presentation Foundation (WPF) 3B özellikleri hakkında gelişmiş bir anlayışa sahip olduğunu varsayar. Bu belgedeki öneriler, kabaca piksel gölgelendiricisi sürüm 2.0 ve köşe gölgelendiricisi sürüm 2.0'ı destekleyen donanım olarak tanımlanan "işleme katmanı 2" için geçerlidir. Daha fazla ayrıntı için bkz . Grafik İşleme Katmanları.
Performans Etkisi: Yüksek
Özellik | Öneri |
---|---|
Brush | Fırça hızı (en hızlıdan en yavaşa): SolidColorBrush LinearGradientBrush ImageBrush DrawingBrush (önbelleğe alınmış) VisualBrush (önbelleğe alınmış) RadialGradientBrush DrawingBrush (uncached) VisualBrush (uncached) |
ClipToBoundsProperty | Windows Presentation Foundation'ın (WPF) içeriğini Viewport3D'nin dikdörtgenine açıkça kırpması Viewport3D gerekmediğinden false olarak ayarlayınViewport3D.ClipToBounds . Windows Presentation Foundation (WPF) antialiased kırpması çok yavaş olabilir ve ClipToBounds üzerinde Viewport3Dvarsayılan olarak etkindir (yavaş). |
IsHitTestVisible | Fare isabet testi gerçekleştirirken bir Viewport3D öğesinin içeriğini göz önünde bulundurmak için Windows Presentation Foundation'a (WPF) ihtiyacınız olmadığında false olarak ayarlayınViewport3D.IsHitTestVisible . Hit test 3D içeriği yazılımda yapılır ve büyük tirelerle yavaş olabilir. IsHitTestVisible üzerinde varsayılan olarak Viewport3Detkindir (yavaş). |
GeometryModel3D | Yalnızca farklı Malzemeler veya Dönüşümler gerektirdiğinde farklı modeller oluşturun. Aksi takdirde, aynı Materials ve Transforms ile birçok GeometryModel3D örneği birkaç büyük GeometryModel3D ve MeshGeometry3D örneğe birleştirmeyi deneyin. |
MeshGeometry3D | Çerçeve başına bir ağın tek tek köşelerini değiştirmek olan mesh animasyonu, Windows Presentation Foundation'da (WPF) her zaman verimli değildir. Her köşe değiştirildiğinde değişiklik bildirimlerinin performans etkisini en aza indirmek için köşe başına değişiklik yapmadan önce ağı görsel ağaçtan ayırın. Mesh değiştirildikten sonra görsel ağaca yeniden ekleyin. Ayrıca, bu şekilde animasyonlu olacak kafeslerin boyutunu en aza indirmeyi deneyin. |
3B Antialiasing | İşleme hızını artırmak için, ekli özelliği EdgeModeAliased olarak ayarlayarak bir Viewport3D üzerinde çoklu örneklemeyi devre dışı bırakın. Varsayılan olarak, Windows'ta 3B antialiasing piksel başına 4 örnekle etkinleştirilir. |
Metin | Bir 3B sahnedeki canlı metin (veya VisualBrushiçinde DrawingBrush olduğundan canlı) yavaş olabilir. Metin değişmedikçe bunun yerine (aracılığıyla RenderTargetBitmap) metin görüntülerini kullanmayı deneyin. |
TileBrush | Fırçanın içeriği statik olmadığından 3B görünümde veya DrawingBrush kullanmanız VisualBrush gerekiyorsa, fırçayı önbelleğe almayı deneyin (ekli özelliği CachingHint olarak Cache ayarlama). Önbelleğe alınan fırçaların çok sık yeniden üretilmemesi ve istediğiniz kalite düzeyinin korunması için en düşük ve en yüksek ölçek geçersizleştirme eşiklerini (ekli özellikler CacheInvalidationThresholdMinimum ve CacheInvalidationThresholdMaximum) ayarlayın. Varsayılan olarak DrawingBrush ve VisualBrush önbelleğe alınmaz, yani fırçayla boyanan bir şeyin her yeniden işlenmesi gerektiğinde, fırçanın tüm içeriğinin önce ara bir yüzeye yeniden işlenmesi gerekir. |
BitmapEffect | BitmapEffect etkilenen tüm içeriğin donanım hızlandırma olmadan işlenmesini zorlar. En iyi performans için kullanmayın BitmapEffect. |
Performans Etkisi: Orta
Özellik | Öneri |
---|---|
MeshGeometry3D | Bir ağ, paylaşılan köşeleri olan abutting üçgenleri olarak tanımlandığında ve bu köşeler aynı konum, normal ve doku koordinatlarına sahipse, paylaşılan köşeleri yalnızca bir kez tanımlayın ve ardından ile dizine göre TriangleIndicesüçgenlerinizi tanımlayın. |
ImageBrush | Boyut üzerinde açık denetiminiz olduğunda doku boyutlarını en aza indirmeyi deneyin (ve/veya ImageBrushkullanırkenRenderTargetBitmap). Daha düşük çözünürlüklü dokuların görsel kalitesini düşürebileceğini unutmayın, bu nedenle kalite ile performans arasında doğru dengeyi bulmaya çalışın. |
Opak -lık | Yarı saydam 3B içeriği (yansımalar gibi) işlerken, 1'den küçük bir değere ayarlayarak Viewport3D.Opacity ayrı bir yarı saydam Viewport3D oluşturmak yerine fırçalarda veya malzemelerde (Opacityveya Coloraracılığıyla) opaklık özelliklerini kullanın. |
Viewport3D | Bir sahnede kullandığınız nesne sayısını Viewport3D en aza indirin. Her model için ayrı Viewport3D örnekleri oluşturmak yerine birçok 3B modeli aynı Viewport3D'ye yerleştirin. |
Freezable | Genellikle , , GeometryModel3DFırçalar ve Malzemeleri yeniden kullanmak MeshGeometry3Dfaydalıdır. 'den Freezable türetildiğinden tümü çok öğelidir. |
Freezable | Freeze Özellikleri uygulamanızda değişmeden kaldığında Freezables'da yöntemini çağırın. Donma, çalışma kümesini azaltabilir ve hızı artırabilir. |
Brush | Fırçanın VisualBrush içeriği değişmezken veya DrawingBrush yerine kullanınImageBrush. 2B içerik aracılığıyla RenderTargetBitmap öğesine Image dönüştürülebilir ve ardından içinde ImageBrushkullanılabilir. |
BackMaterial | 'nizin GeometryModel3Darka yüzlerini gerçekten görmeniz gerekmediği sürece kullanmayınBackMaterial. |
Light | Işık hızı (en hızlıdan en yavaşa): AmbientLight DirectionalLight PointLight SpotLight |
MeshGeometry3D | Ağ boyutlarını şu sınırların altında tutmaya çalışın: Positions: 20.001 Point3D örnek TriangleIndices: 60.003 Int32 örnek |
Material | Malzeme hızı (en hızlıdan en yavaşa): EmissiveMaterial DiffuseMaterial SpecularMaterial |
Brush | Windows Presentation Foundation (WPF) 3D, görünmez fırçaları (siyah ortam fırçaları, temiz fırçalar vb.) tutarlı bir şekilde geri çevirmez. Bunları sahnenizden atmayı göz önünde bulundurun. |
MaterialGroup | Bir içindeki her Material biri başka bir MaterialGroup işleme geçişini neden olur, bu nedenle birçok malzeme, hatta basit malzemeler dahil olmak üzere GPU'nuzdaki doldurma taleplerini önemli ölçüde artırabilir. içindeki MaterialGroupmalzeme sayısını en aza indirin. |
Performans Etkisi: Düşük
Özellik | Öneri |
---|---|
Transform3DGroup | Animasyona veya veri bağlamaya ihtiyacınız olmadığında, birden çok dönüşüm içeren bir dönüşüm grubu kullanmak yerine tek MatrixTransform3Dbir kullanın ve bunu dönüştürme grubunda bağımsız olarak var olabilecek tüm dönüşümlerin ürünü olarak ayarlayın. |
Light | Sahnenizdeki ışık sayısını en aza indirin. Bir sahnede çok fazla ışık olması Windows Presentation Foundation'ı (WPF) yazılım işlemeye geri dönmeye zorlar. Sınırlar kabaca 110 DirectionalLight nesne, 70 PointLight nesne veya 40 SpotLight nesnedir. |
ModelVisual3D | Hareket eden nesneleri ayrı örneklere yerleştirerek statik nesnelerden ayırın ModelVisual3D . ModelVisual3D, dönüştürülen sınırları önbelleğe almasından GeometryModel3D "daha ağırdır". GeometryModel3D model olacak şekilde iyileştirilmiştir; ModelVisual3D, bir sahne düğümü olacak şekilde iyileştirilmiştir. GeometryModel3D'nin paylaşılan örneklerini sahne içine yerleştirmek için ModelVisual3D kullanın. |
Light | Sahnedeki ışık sayısını değiştirme sayısını en aza indirin. Her ışık sayısı değişikliği, yapılandırma daha önce mevcut değilse (ve bu nedenle gölgelendiricisi önbelleğe alınmadıysa) bir gölgelendirici yeniden oluşturmayı ve yeniden derlemeyi zorlar. |
Açık | Siyah ışıklar görünmez, ancak işleme süresi ekler; bunları atmayı göz önünde bulundurun. |
MeshGeometry3D | Windows Presentation Foundation'da (WPF) büyük koleksiyonların oluşturma süresini en aza indirmek için; örneğin, MeshGeometry3D'nin Positions, Normals, TextureCoordinatesve TriangleIndices, koleksiyonlarını değer popülasyondan önce önceden boyutlandırın. Mümkünse, koleksiyonların oluşturucularının diziler veya Listeler gibi önceden doldurulmuş veri yapılarını geçirin. |
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin