我希望能够在C#项目中创建几百个winrt控件实例(搜索结果控件).问题是这样做需要太长时间(十分之一秒或更糟),并且必须在UI线程上完成,从而在显示结果时产生停顿和延迟.
现在我通过在启动期间预先缓存许多控件实例来绕过这个问题.这种方法有效,但会影响启动时间(分析显示启动时40%的处理器时间用于缓存这些控件)并创建要管理的详细信息,例如缓存的大小.
我认为问题在于,每次控件实例化时,冗余工作(如重新解析XAML)都是由底层框架完成的.也许有办法避免重复这项工作?也许我可以廉价地克隆一个现有的控件?有人有想法吗?
最佳答案 >您可以在并行线程中执行预缓存.对多核处理器的启动时间影响较小
> searchresult.memberwiseclone将给你浅拷贝.它可能更快,不确定
>您可以只使用一个搜索结果并在使用前用正确的数据填充它吗?在这种情况下,不需要创建很多.只需使用一个作为可重复使用的容器.
>如果将控件添加到父表单中,则可以使用时间
> suspendlayout / resumelayout(这是win32)
>完成后,将父设置为不可见,然后返回可见状态
>还有另一种方法可以更快地完成同样的事情吗? (竞争控制,3D派对等)