V2EX 07月16日
[程序员] 尝试 WPF 的桌面开发后,感觉 electron 真好
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

文章探讨了在.NET Framework的WPF应用中绘制大量Path时遇到的性能问题,以及作者尝试的多种优化方案。通过对比.NET8、AvaloniaUI和Electron等技术栈,最终选择了Electron,利用React+Vite和d3.js在SVG下绘制Path,解决了WPF渲染卡顿的问题。作者分享了优化过程中的经验,并强调了Electron在节省学习和研发成本方面的优势。

🎨 **WPF .NET Framework性能瓶颈**: 在WPF应用中直接在Canvas组件中挂载大量Path导致系统卡顿,计算和渲染时间长达8秒。优化后仅绘制可视区域,虽然初次加载变快,但滚动条拖动重新渲染仍然卡顿,初次渲染也需要2秒。

🚀 **.NET升级与Bitmap尝试**: 作者尝试将项目升级到.NET8,但性能提升有限。考虑使用Bitmap进行优化,但由于Path上绑定了大量事件,修改起来非常复杂。

💻 **技术栈对比与Electron胜出**: 作者测试了WPF .NET8、AvaloniaUI和Electron三种技术栈。WPF和AvaloniaUI表现相似,Electron(React+Vite+d3.js)在SVG下绘制Path,初次计算和渲染不到3秒,且滚动条滑动流畅。Electron节省了大量的学习和研发成本。

💡 **Electron的优势**: Electron在解决WPF渲染性能问题的同时,降低了学习和研发成本。作者认为Electron能快速解决的问题,在WPF中优化非常困难,体积大点无所谓,不用费劲心思做渲染优化很爽。

之前没有学过 .NET ,所有内容都是现学的,需要给老项目做后续的开发和优化,项目是基于 .NET Framework 的 WPF 应用,在一个页面中需要绘制大量的 Path 。

项目是在 Canvas 的组件中直接挂载 Path ,在挂载组件的时候,系统非常卡,在计算完所有的 Path 后,需要 8 秒左右才能完全显示出来。

优化为仅绘制可视区域,虽然初次加载变快了,但是滚动条拖动重新渲染还是很卡,并且初次渲染也要花 2s 左右

后面又对.NET 升级,拉到了.NET8 但是提升效果几乎没有

也又考虑过利用 Bitmap 去做优化,但是原来的 Path 上面绑定了一堆事件,改起来非常麻烦

于是就利用了几个技术栈对绘制做了测试:

除此之外,Electron 节省了大量的学习和研发成本,刚刚接触 .NET 的时候真的头疼,每次优化的时候都在想,用 electron 能快速解决的事情,在 WPF 里是完全的蒙圈。网上浏览了一圈,很多关于 WPF 渲染性能的问题

体积大点就大点,不用费劲心思去做渲染优化是真的爽

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

WPF Path绘制 .NET Electron 性能优化
相关文章