反射成本:WPF



我已经实现了一个扩展助手来动态加载WPF用户控件到窗口。(MyButton在另一个程序集中)。

这个帮助器位于我所有项目中使用的类库中。这个想法是为了节省重新编码这个操作,并保持客户端代码更干净。

我需要第二对眼睛(或更多)让我知道这样做的成本是否太高。

谢谢。

 public static Window OpenUserControl(this MyButton button, string controlName, string title)
        {
            //      
            object uControl;
            try
            {
                Type newType = button.GetType().Assembly.GetType(controlName,true,true);
                uControl = Activator.CreateInstance(newType);
            }
            catch (Exception e)
            {                
                throw;
            }

            // launch the usercontrol as a window.
            Window form = new Window
            {
                Title = title,
                Content = uControl,
                ShowInTaskbar = false
            };
            return form;
        }

如果您在编译时知道该类型,那么您最好将其设置为泛型:

// Possibly add more generic constraints to T?
public static Window OpenUserControl<T>(string title)
    where T : new()
{
    return new Window
    {
        Title = title,
        Content = new T(),
        ShowInTaskbar = false
    };
}

这可能比通过反射查找类型快一个,尽管另一种选择是缓存一个委托来调用无参数构造函数——更多的工作,但在我的经验中快得多。您可以通过嵌套的泛型类来实现这一点,将Func<T>Func<object>缓存为类中的静态字段。

只有您才能真正判断这是否足够快-但它应该足够容易进行基准测试,我非常怀疑它将成为瓶颈。

相关内容

  • 没有找到相关文章

最新更新