- 滥用Effect, 不得将位图效果应用于大型可视对象或动画,因为这样做会降低性能。
不止一次的在这里吃亏,对于性能比较好的机器,是没有问题的,对于性能比较差的机器,简直是灾难,每点击一次按钮都很慢。例如:
<Grid.BitmapEffect>
<DropShadowBitmapEffect Direction="315" Color="Black" Opacity="0.4" Softness="0.3" ShadowDepth="8"/>
</Grid.BitmapEffect>
- Window的MinHeihgt 和MinWidth没有设置。对于屏幕很小的机器,或者DPI很高的机器,当screen的size小于window的size时,window Render时, 会按照screen 的size 进行render,也就是说window被裁掉了一部分,设置了MinHeight 和MinWidth,一切OK。
- 如果WPF程序中有不少图片,尤其是大图片,一定要压缩,有很多方法,例如图片浏览时加载小图,图片查看时加载大图,或者加载图片时加载动态生成的缩略图。否则,内存一个劲儿的涨。
- WPF中使用的图片,如果DPI不是96的,用imageSource获取后,查看imageSource的尺寸发现,和图片本身的尺寸出入很大,这是因为WPF的单位的分辨率无关性,一般是1/96英寸(详见http://book.51cto.com/art/200908/145299.htm),所以为了保证图片正常,尽量把图片处理为96DPI的。处理办法:用Photoshop打开图片,存储为web格式,选择png-24输出,就ok了,或者自己写个程序处理图片(我写过一个,需要的叫一声)。
查看图片DPI方法:图片—Properties—Details ,如果图片不是jpg的,扩展名改为jpg。
- 用Animation时,相对应的属性会被锁定,即便是Completed事件中,想改掉值,也很难,有网友给出了解决办法:http://blog.csdn.net/alamiye010/archive/2009/08/29/4498060.aspx
我的解决办法比较极端:改用DispatchTimer,通过Tick来实现动画。
因为我碰到了这么一个问题,有些Panel可以流布局的,比如StackPanel,流布局时,高度当然是Double.NAN,可是我又想对Height做Animation,怎么办呢?这时候DoubleAnimation就难为情了,所以革命,改为DispatcherTimer。
- 在决定采用WPF技术时,尽量确保客户机器是win7操作系统,如果是xp,performance是个问题,而且还有一些稀奇古怪的问题等着你,而且还要对付那些山寨的Ghost XP 系统可能造成的问题。麻烦的还有,要装那个很大的.net Framework .如果一定要用xp,window尽量不要AllowTranceparency=True。个人觉得,WPF适合用在行业客户,目标平台都是win7。
- WPF中, WindowsFormsHost控件实际创建了一个窗体,有单独的句柄,这个控件的层次关系是最高的,会遮盖其他元素。如果准备插入Flash,或者其他插件,要注意了。
- 在性能比较差的机器上,XP环境下, MediaElement 的性能比嵌入Windows Media Player的性能
要差一些,前者CPU占用率比较高,后者要求MediaPlayer的版本至少是8?
- 不要一味的追求用Xaml写所有的东东,有时候用Xaml反而比较麻烦,出了问题调试麻烦,建议在比较熟悉Xaml使用,并且根据实际需要,哪个方便用哪个。
- 追求各种效果时,结合项目需要,每种效果都是有性能代价的,需要在性能和效果之间有个平衡。性能超好的,除外,呵呵。
- remove unnecessary references. 移除那些不需要的引用。