- 主题:c#/wpf做ui开发大坑慎入
1. wpf的设计对绘制、系统响应要求极高,按照60fps,事件响应大于16ms就会卡顿,丢帧,闪烁, 而且后果极其严重,比如阻塞导致mouse move消息消失,鼠标位置与响应不同步
2. 完成度不够,不够成熟,高频消息需要自己hack来实现平滑移动效果,定时器能差个几十毫秒,很多基础的功能都得自己实现, 比如ToolTip
3. wpf的使用独特的ui渲染双线程模型,大部分第三方技术采用消息队列和UI绘制在主线程,导致其利用既有成熟的第三方库极其困难
4. 3D功能羸弱,基本不可用。 2D功能满足不了高频刷新的要求
5. C#的内存泄露问题比C++严重,更难定位, 想写出内存不泄露的ui程序, 需要良好的架构设计和严格遵守, 比C++要求更高
C#/wpf只适合开发一些不专业的ui,直接用electron那套, 只能到这种程度了
--
FROM 111.194.203.*
这是普通的正常的理解
正常的使用win32的消息队列,qt都会最 WM_MOUSEMOVE进行合并, 导致延迟
但是wpf不是, 它使用的是自己的机制,直接从设备来的
美名其曰要做流畅丝滑的动画效果
所以它的消息不是合并,也不是延迟, 而是丢失。。。。
【 在 MyWorkLife 的大作中提到: 】
: 有一个地方不太准确:
: -- Windows 的消息队列机制不会丢掉 WM_MOUSEMOVE,只是 UI 线程可能处理不及时,表现为“延迟”而不是“消息丢失”
: 默认情况WM_MOUSEMOVE在消息队列里是会合并的
: ...................
--
FROM 118.26.68.*
1. wpf不使用win32的消息队列, 阻塞最严重的后果不是延迟, 而是消息丢失, ChatGPT不准确
2. ToolTip没有mouse hover消息需要自己实现
3. 避免ui阻塞时卡死渲染,不知道ai是怎么理解的, ui阻塞卡死渲染想做什么???
4. 普通业务就是Electron水平的意思
5. C#的内存泄漏查找起来比c++更困难,说调试工具很容易定位不靠谱。 而且影响是全局性的,需要全局设计。 c++是到点的负担要小的多
6. ChatGPT本着能用就行的策略, 要说客观评价很难, 但是用WPF开发绝对是个不靠谱的选择,在技术风险上, 远远不如Qt靠谱
【 在 z16166 的大作中提到: 】
: 我来逐条帮你分析这段话里的内容是否符合事实。整体上,这段话带有比较强的负面情绪和夸张成分,很多地方是不准确甚至是误解。
: 1. “wpf的设计对绘制、系统响应要求极高,按照60fps,事件响应大于16ms就会卡顿...”
: ? 部分正确,但表述极端:
: ...................
--
FROM 118.26.68.*
说的就是managed内存泄露, 查找起来非常困难
不使用指针的代价就是强引用
但是强引用在复杂的情况下,非常容易引起循环引用
解决循环引用的难度比查找指针哪里泄露大多了
所以内存自动管理这个东西在大型应用中不一定是优势
【 在 sleepbear 的大作中提到: 】
: c++的因为内存管理难,所以有比较强大的分析工具,跑出泄露场景后,有些工具甚至能直接指出是在哪一句代码new出来的东西没有delete.
: c#里,内存管理分为managed的非managed的,managed的部分是用垃圾回收管理的,相对会简单一些,而非managed的,需要手动释放。
--
FROM 111.194.203.*
为什么你们一提起来ui就是控件、美化????靠这些为生?
图形技术是对计算机性能要求最高的技术之一
即使是现在计算性能过剩的阶段
仍然难以满足很多实时图形绘制的要求
实际上ui/图形是很多工业/专业级软件的必备要求
举个例子地图/GIS/CAD是做ui吗
感觉一觉话就可以杀死很多行业
现在无非就是流量即赚大钱
有很多的技术基石是非要人做不可的
【 在 z16166 的大作中提到: 】
: 挣不了大钱,挣点小钱没啥问题,
: MFC的bcgcontrolbar、xtreme toolkit这些控件库发展成小公司,后来追加卖.net的控件库
: BCB/Delphi也是有几家
: ...................
--
FROM 111.194.203.*
你说的不错, 游戏渲染的确是ui技术之一, 只是比较特殊一点
我想说的是对于大部分工业软件
图形技术是其核心和瓶颈而不是边角料
赚钱不赚钱重要的是行业选择
【 在 z16166 的大作中提到: 】
: 因为每个人接触的领域不同,盲人摸象
: 如果要泛化地说,游戏渲染之类的也是UI啊
: 再说了,开发控件库就丢人了,而开发gis/cad就是高大上、大国重器了?
: ...................
--
FROM 111.194.203.*
开发qt/electron/wpf这些人难道和gis/cad不是一波人吗?
至于你这个比较掏粪工也比较无语
windows这个掏粪工大概最底层了
【 在 z16166 的大作中提到: 】
: 因为每个人接触的领域不同,盲人摸象。狭义的UI就是界面库、外设交互消息的处理。
: 如果要泛化地说,游戏渲染之类的也是UI啊
: 再说了,开发控件库就丢人了,而开发gis/cad就是高大上、大国重器了?
: ...................
--
FROM 111.194.203.*