现在的位置: 首页 > 综合 > 正文

How to improve ElementHost performance

2013年04月01日 ⁄ 综合 ⁄ 共 583字 ⁄ 字号 评论关闭
最近在对WPF和Win32、Windows Form互相寄宿进行性能优化,发现其中导致的性能损失不可忽视。由于在Visual Studio AddIn无法直接创建WPF的控件,需要借助ElementHost寄宿于Windows Form控件。正是由于这样一个中间层的转换导致ElementHost内部占用了较高的内存(通过Mem Profiler发现大约损耗在25MB)。并且由于内部KeepWPFInitialized等函数的初始化导致加载WPF Control也相当耗时。下面说两个处理方式以改善性能:

1. 在应用程序启动时创建一个Size为1的Windows Form控件,内部有一个同样Size为1的ElementHost。这样可以确保再加载真正的WPF 控件时已经完成了WPF Runtime的创建工作。比如你可以在OnConnection函数中的DTE2的ext_ConnectMode为ext_cm_Startup时创建,然后在ext_cm_AfterStartup时加载真正的WPF 控件。
2. 当ElementHost寄宿的Windows Form控件SizeChanged后,调用GC.Collect函数回收创建Bitmap后导致等待回收的部分多余内存。
Visual Studio 2010的Start Page是用WPF开发的,所以启动以后所耗费的内存和我现在推算的几乎一致。

抱歉!评论已关闭.