WPF 3B Performansını En Üst Düzeye Çıkarma
Windows Presentation Foundation (WPF) kullanarak 3B denetimler derleme ve uygulamalarınıza 3B sahneler dahil etme gibi performans iyileştirmelerini göz önünde bulundurabilirsiniz. Bu konu başlığında, uygulamanıza performans etkileri olan 3D sınıfların ve özelliklerin listesinin yanı sıra bunları kullanırken performansı iyileştirmeye yönelik öneriler de verilmektedir.
Bu konu başlığında, Windows Presentation Foundation (WPF) 3B özellikleri hakkında gelişmiş bir anlayış olduğu varsayıldı. Bu belgede yer alan öneriler, kabaca piksel gölgelendiricisi sürüm 2.0 ve köşe gölgelendiricisi sürüm 2.0'i destekleyen donanım olarak tanımlanan "işleme katmanı 2" için geçerlidir. Diğer ayrıntılar 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 (ulaşılmamış) VisualBrush (ulaşılmamış) |
| ClipToBoundsProperty | Bir Viewport3D.ClipToBounds örneğinin (WPF) içeriğini Viewport3D'nin dikdörtgeni için açıkça kırpmanız gerekmaması Windows Presentation Foundation false Viewport3D olarak ayarlayın. Windows Presentation Foundation (WPF) yanlı kırpma çok yavaş olabilir ve üzerinde varsayılan olarak ClipToBounds etkindir Viewport3D (yavaş). |
| IsHitTestVisible | Fareyle Viewport3D.IsHitTestVisible tıklama testi yaparken içeriğini göz önünde Windows Presentation Foundation (WPF) gerektirerek false olarak Viewport3D ayarlayın. 3D içeriklere isabet testi yazılımda yapılır ve büyük meshes ile yavaş olabilir. IsHitTestVisible , üzerinde varsayılan olarak etkindir Viewport3D (yavaş). |
| GeometryModel3D | Yalnızca farklı Malzemeler veya Dönüşümler gerekli olduğunda farklı modeller oluşturun. Aksi takdirde, birden çok örneği aynı Malzemeler ve Dönüşümler ile birkaç büyük ve GeometryModel3D örneğine GeometryModel3D dönüştürmeyi MeshGeometry3D deneyin. |
| MeshGeometry3D | Mesh animasyonu (bir örgün köşelerini çerçeve başına temelinde değiştirme) her zaman tek tek Windows Presentation Foundation (WPF) 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 gerçekleştirmeden önce görsel ağaçtan ağı ayırabilirsiniz. Örgü değiştirildiktan sonra görsel ağacına yeniden takarak. Ayrıca, bu şekilde animasyonlu olacak meshes boyutunu en aza indirmeyi deneyin. |
| 3D Antialiasing | İşleme hızını artırmak için, ekli özelliğini olarak ayarerek Viewport3D çoklu örneklemeyi devre dışı olduğu gibi devre dışı EdgeMode olduğu Aliased gibi. Varsayılan olarak, piksel başına 4 örnekle 3D Windows etkinleştirilmiştir. |
| Metin | 3D sahnenin canlı metni (veya içinde olduğundan DrawingBrushVisualBrush canlı) yavaş olabilir. Metin değişmedikçe bunun yerine RenderTargetBitmap (aracılığıyla) metnin görüntülerini kullanmayı deneyin. |
| TileBrush | Fırça içeriği statik olduğundan 3D sahnesinde veya kullanmalısanız fırçayı önbelleğe almayı deneyin VisualBrushDrawingBrush (ekli özelliği olarak CachingHintCache ayarlayın). Önbelleğe alınan fırçaların çok sık yeniden üretilemeyişini ve yine de istediğiniz kalite düzeyini korumasını sağlamak için minimum ve maksimum ölçek geçersiz kılınma eşiklerini (ekli özellikler ve CacheInvalidationThresholdMinimumCacheInvalidationThresholdMaximum ile) ayarlayın. Varsayılan olarak ve önbelleğe alınmaz. Başka bir ifadeyle fırçayla çizilen bir şeyin yeniden işlenecek olması gerekirken fırça içeriğinin tamamının önce ara bir yüzeyde yeniden DrawingBrushVisualBrush işlenecek olması gerekir. |
| BitmapEffect | BitmapEffect , etkilenen tüm içeriğin donanım hızlandırma olmadan işlenmesini sağlar. En iyi performans için BitmapEffect kullanmayın. |
Performans Etkisi: Orta
| Özellik | Öneri |
|---|---|
| MeshGeometry3D | Bir örgü, paylaşılan köşelere sahip üçgenler olarak tanımlandığı zaman ve bu köşeler aynı konuma, normale ve doku koordinatlarına sahipse, paylaşılan her köşeyi yalnızca bir kez tanımlayın ve ardından ile dizine göre üçgenlerinizi TriangleIndices tanımlayın. |
| ImageBrush | Boyut üzerinde açık denetime sahipken (ve/veya kullanırken) doku boyutlarını en aza RenderTargetBitmap indirmeyi ImageBrush deneyin. Daha düşük çözünürlüklü dokuların görsel kalitesini düşürebilir, bu nedenle kalite ile performans arasında doğru dengeyi bulmaya çalışabilirsiniz. |
| Opak -lık | Saydam 3B içeriği (yansımalar gibi) işlerken, 1'den küçük bir değere ayar olarak ayrı bir saydamlık oluşturmak yerine fırçalar veya malzemelerde opaklık özelliklerini kullanın (veya OpacityColorViewport3DViewport3D.Opacity aracılığıyla). |
| Viewport3D | Bir sahnede Viewport3D kullanmakta olduğu nesne sayısını en aza indirme. Her model için ayrı Viewport3D örnekleri oluşturmak yerine birçok 3D modeli aynı Viewport3D'ye koyabilirsiniz. |
| Freezable | Genellikle , , Fırçalar ve Malzemeleri MeshGeometry3DGeometryModel3D yeniden kullanmak faydalıdır. Hepsi, 'den türetildiklerinden çok Freezable ayrılabilir. |
| Freezable | Özellikleri Freeze uygulamanıza değişmeden kalacak olduğunda Freezables üzerinde yöntemini çağırma. Donma, çalışma kümelerini azaltabilir ve hızı artırabilir. |
| Brush | ImageBrushFırçanın VisualBrush içeriği DrawingBrush değişmeyecek olduğunda veya yerine kullanın. 2D içeriği aracılığıyla bir'e Image dönüştürmek ve sonra bir içinde RenderTargetBitmapImageBrush kullanılabilir. |
| BackMaterial | gerçekten kendi BackMaterial yüzlerinin arka yüzlerini görmek zorunda olmadığınız sürece GeometryModel3D kullanma. |
| Light | Düşük hız (en hızlıdan en yavaşa): AmbientLight DirectionalLight PointLight SpotLight |
| MeshGeometry3D | Örgü boyutlarını şu sınırların altında tutmaya çalışabilirsiniz: 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) 3B, görünmez fırçaları (siyah ortam fırçaları, açık fırçalar vb.) geri kabul etmemektedir tutarlı bir şekilde. Bunları sahnenden göz önünde bulundurarak göz önünde bulundurarak. |
| MaterialGroup | Bir içinde her biri başka bir işleme geçişini sağlar; bu nedenle birçok malzeme, hatta basit malzemeler dahil olmak üzere GPU'lar için doldurma MaterialMaterialGroup taleplerini önemli ölçüde artırabilir. içinde malzeme sayısını en aza MaterialGroup indirme. |
Performans Etkisi: Düşük
| Özellik | Öneri |
|---|---|
| Transform3DGroup | Animasyona veya veri bağlamaya ihtiyacınız yoksa, birden çok dönüştürme içeren bir dönüştürme grubu kullanmak yerine tek bir kullanın. Bunu, aksi takdirde dönüştürme grubunda bağımsız olarak var olacak tüm dönüştürmelerin ürünü olarak MatrixTransform3D ayarlarsınız. |
| Light | Sahnenizin ışık sayısını en aza indirme. Bir sahnede çok fazla ışık 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 | Nesneleri statik nesnelerden ayrı örneklere koyarak ModelVisual3D ayırma. ModelVisual3D, dönüştürülmüş sınırları önbelleğe GeometryModel3D alan modelden "daha ağırdır". GeometryModel3D, model olacak şekilde optimize edilmiştir; ModelVisual3D, sahne düğümü olacak şekilde optimize edilmiştir. ModelVisual3D kullanarak GeometryModel3D'nin paylaşılan örneklerini sahneye alın. |
| Light | Sahnenin ışık sayısını değiştirme sayısını en aza indirme. Her ışık sayısı değişikliği, yapılandırma daha önce mevcut değilse (ve dolayısıyla gölgelendiricisi önbelleğe alınmamışsa) gölgelendirici yeniden oluşturma ve yeniden derlemeyi zorlar. |
| Açık | Siyah ışık görünür olmayacaktır, ancak işleme süresine ek olarak yenilerini ekler; bunları göz önünde bulundurarak göz önünde bulundurarak bunları yok sayma. |
| MeshGeometry3D | MeshGeometry3D'nin , , ve gibi Windows Presentation Foundation (WPF) içinde büyük koleksiyonların derleme süresini en aza indirmek için koleksiyonları değer popülasyondan önce PositionsNormals önceden TextureCoordinatesTriangleIndices boyuta küçülttü. Mümkünse, koleksiyonların oluşturucularını diziler veya Listeler gibi önceden doldurulan veri yapılarını iletir. |