none
wpf文字显示不全的现象 RRS feed

  • 常规讨论

  • 我用WPF做了一个比较大的应用程序,开始还运行正常(在winxp系统运行),但是运行久了,程序占用的内存大了(用到虚拟内存),就会出现了文字显示不全的现象,
    在有些机器会时常出现,一些机器又没有发现这种现象,不知道是不是没打补丁还是需要在某些时候重绘才可以避免这种问题的发生。

    打了wpf的两个内存泄漏补丁(NDP30SP2-KB967634-x86.exe 和 NDP30SP2-KB981107-x86.exe)也没用。

    问题图片:http://hi.csdn.net/attachment/201106/3/954085_1307080811zZY3.jpg


    • 已更改类型 Junyius 2011年6月3日 6:14
    • 已更改类型 Junyius 2011年6月3日 6:14
    • 已编辑 Junyius 2011年6月10日 6:46
    • 已更改类型 Jie BaoModerator 2011年6月14日 9:42
    • 已更改类型 Junyius 2011年6月15日 7:23
    2011年6月3日 6:13

全部回复

  • XP 中没有DWM, 而且这种问现象很多情况取决于硬件,你参考下这篇KB http://support.microsoft.com/kb/963021 测试下, 如果实在没辙Connect site上发一个反馈。 不过XP环境已经很难给予support了,

     

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月3日 6:47
    版主
  • 1、安装了.net 4 client profile 还是会出现文字显示不全的现象

    2、HwndSource的CompositionTarget->RenderMode = RenderMode::SoftwareOnly; 就是把wpf的渲染变为software,也会出现文字显示不全的问题,而且当我改变窗口大小还会出现程序崩溃。当内存不足,用到虚拟内存的时候,这个文字显示不全的问题频繁出现。

    3、在我编译这个程序的时候我忽略了warning C4793: '__asm' : causes native code generation for function 'XXXXXXX' 这一种错误,不知道是不是引起这种文字显示不全的元凶

    p.s. 出现文字显示不全的程序主体语言是c++,用clr调用.net显示wpf界面的

     





    2011年6月7日 3:49
  • Junyius,

    你好,我看了你的图片链接,注意到文本框中有滚动条。想问一下,你的文言是否是在重复刷新?文本框是用什么来呈现的呢?是WPF中的RichTextBox吗?最好可以把相关的程序结构跟我们大致讲一下。这样比较容易对问题的根本原因作出分析。

    机器运行一段时间后就会占用大量内存的话,可能是在机器性能方面(内存)存在瓶颈,这里能否给出你重现机型的详细配置?Windows 重画界面时的渲染表面等等对象都需要消耗一定的内存,如果内存占用过高,对渲染是有很大影响的。如果是这样的情况,我们可以从程序架构方面优化内存使用,以缓和内存占用的情况。

    致,

     


    Yves Zhang [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月7日 9:01
    版主
  • 还有你还可以在其他环境中测试下,重点还是关注于内存上。硬件上的瓶颈一方面通过改变程序的总体设计可以来进行适当的规避,但是对于WPF这种技术,要求依赖显卡硬件的和消耗资源较大的,你可以考虑是否有没有别的展现技术来替代。 我相信你的程序会长时间运行,会使用大量的内存和资源,这一点上,更像是服务性质的程序,如果是这样,我个人觉得不必要太过于纠结于UI上,在保证服务功能的完整优良后,再考虑也不迟。

    试试Yves的建议,尽可能减少内存。

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月7日 9:11
    版主
  • 机器有3台都会出现:

    其中一台:

    CPU:Intel(R) Pentium(R) D CPU 2.80GH (双核)

    2G 内存

    显卡:GeForce 7300 LE (512M显存)

    其他两台:

    都是酷睿双核CPU

    2G内存

    显卡:用其他芯片刷的GT 220,用GPU-Z也看不出核心 (1G显存),估计性能大于GeForce 7300 LE

    wpf窗口用的是UsesPerPixelOpacity = true;

    图片显示的窗口不是用RichTextBox,用的是FlowDocumentScrollViewer控件,用blend3生成的界面

    我没重载OnRender函数,不会手工重复刷新,wpf内核是否在重复刷新就不清楚了

    wpf我很想释放它的内存,但是.net clr只提供gcnew,就没怎么提供delete,.net是自己管理内存的,不给用户释放内存的接口,所以它的内存变得很大,我也没办法释放

    某些时候当窗口大小改变,wpf开始生成更新界面的时候我见到某个字是出现了的,但不久(当界面更新完稳定下来后)就消失了,好似那个字的颜色同他的背景颜色一样,所以就消失了

    有时候在输入框中打字,文字也不显示出来(不显示出来的估计都是中文),如果用右键点复制粘帖,粘帖到文本文档中,字是全的。有时候点右键弹出的复制粘帖菜单,字也是只剩下底部的1/10左右是有笔画显示的,上面那9/10的字体都看不见了。

    有时候改变窗口大小,窗口更新后所有控件(Button,TextBlock等)的字都会不见,重装XP系统并且安装了.net 4 client profile这种现象还没出现过

    除了这3部机器,其他机器至今未发现有文字显示不全的问题,所以有时想在自己的机器重现问题都难,所以怀疑是软件系统的问题

    wpf的控件文字显示不全后,可能是文字纹理生成失败,很想再让wpf激活生成文字的过程,或者截获到异常,但是不知道应该调用什么函数



    2011年6月8日 6:30
  • CLR通过自动GC来管理托管堆,不过还是可以通过显式地调用 GC.Collect 方法来GC的,前提是保证不用的对象已经没有了引用。具体参考.Net自动垃圾回收: http://msdn.microsoft.com/zh-cn/library/f144e03t.aspx

     

    不过你得问题,我还有建议和一点看法。既然某些PC能够正常运行,那么说明你的代码是没有致命问题的,而我们的关注焦点要移到那些有问题的PC的特殊设置上,你所要做的是比较这个有问题的PC和没有问题的PC的硬件软件配置,特别是软件上的,比如是否有安装特殊的软件,是否有杀毒翻译的软件(因为这些软件通常会挂系统钩子来截获系统消息,对我们的程序有点影响)。还有我的建议是,你要检查一个和WPF 字体相关的服务是否正常 --  WPF Font Cache service

     

    还有你看下下面这个帖子,可能你的也是她所说的这个问题: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/498984ed-5877-4602-a363-e34eadf88440  如果是的话,你试试看WPF4


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月8日 16:49
    版主
  • 防止内存泄漏是一方面,另一方面我想了解,显示不出来的文字是否都为中文?或者为特殊符号?远东地区语言比如中文,日文字体glyph比较复杂,字体文件也比较大,渲染起来会慢一些。


    Yves Zhang [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月9日 3:44
    版主
  • 1、我已经安装了.net 4 client profile,也就是应该默认就是使用wpf4的,但是问题依旧,不过文字消失的机率好似少了点。不过我发现同时装有.net 3.5sp1 和.net 4的机器,程序运行后默认启动的 WPF Font Cache service还是3.0.0.0(Windows Presentation Foundation Font Cache 3.0.0.0)的!

    2、是的,不显示出来的都是中文字。




    2011年6月9日 6:15
  • UseLayoutRounding="False"
    2011年6月9日 6:18
  • 1、我已经安装了.net 4 client profile,也就是应该默认就是使用wpf4的,但是问题依旧,不过文字消失的机率好似少了点。不过我发现同时装有.net 3.5sp1 和.net 4的机器,程序运行后默认启动的 WPF Font Cache service还是3.0.0.0(Windows Presentation Foundation Font Cache 3.0.0.0)的!

     

    不是哦,用什么.Net Framework 是由你的程序的编译Target决定的。你在C++里面用的是那个版本的WPF相关程序集,比如你用了4.0 WPF的程序集,那么你的程序就会在CLR4.0下跑,用的是 WPF Font Cache 4.0 Service。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月9日 8:51
    版主
  • 即使我安装了.net 4 client profile,在C盘路径(C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\WPF)有一堆的PresentationCore.dll(4.0.30319.1)和PresentationFramework.dll(4.0.30319.1)等wpf文件,但是我的vs2005项目的“Add New Reference”窗口却没有对这些wpf文件的链接,只有PresentationCore 3.0.0.0,PresentationFramework 3.0.0.0等版本的链接。 vs2008项目的“Target Framework” 下拉框也只有“.net Framework 2.0”、“.net Framework 3.0”和“.net Framework 3.5” 三种选择。

     

    如果我还想用vs2005或vs2008编译平台,是不是要安装windows sdk: "Microsoft Windows SDK for Windows 7 and .NET Framework 4" ?


    2011年6月10日 3:38
  • 只有VS 2010才有.Net 4.0的选项,  05 08都没有的。 这个和SDK没有关系。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月10日 9:35
    版主
  • 我建议楼主改成讨论帖, 讨论一下该死的WPF的各种倒霉问题!大家一起讨论!


    Stay hungry, stay foolish
    2011年6月13日 11:58
  • 你发的图片已经不能看了,我想我应该遇到和你相同的问题,我的问题

    https://social.msdn.microsoft.com/Forums/zh-CN/caa692db-7da3-40c4-84c2-91e1e3caabd9/wpf-?forum=wpfzhchs

    ,请问最总解决方案是什么啊

    2015年5月29日 9:17
  • 升级4.0并增大user address space  后,32位程序标记/LARGEADDRESSAWARE 解决问题
    2015年6月25日 7:26