运维开发网

在C#中有效地创建了winrt地铁控制的许多实例

运维开发网 https://www.qedev.com 2020-03-20 15:07 出处:网络 作者:运维开发网整理
我希望能够在C#项目中创建几百个winrt控件实例(搜索结果控件).问题是这样做需要太长时间(十分之一秒或更糟),并且必须在UI线程上完成,从而在显示结果时产生停顿和延迟. 现在我通过在启动期间预先缓存许多控件实例来绕过这个问题.这种方法有效,但会影响启动时间(分析显示启动时40%的处理器时间用于缓存这些控件)并创建要管理的详细信息,例如缓存的大小. 我认为问题在于,每次控件实例化时,冗余工作(如
我希望能够在C#项目中创建几百个winrt控件实例(搜索结果控件).问题是这样做需要太长时间(十分之一秒或更糟),并且必须在UI线程上完成,从而在显示结果时产生停顿和延迟.

现在我通过在启动期间预先缓存许多控件实例来绕过这个问题.这种方法有效,但会影响启动时间(分析显示启动时40%的处理器时间用于缓存这些控件)并创建要管理的详细信息,例如缓存的大小.

我认为问题在于,每次控件实例化时,冗余工作(如重新解析XAML)都是由底层框架完成的.也许有办法避免重复这项工作?也许我可以廉价地克隆一个现有的控件?有人有想法吗?

>您可以在并行线程中执行预缓存.对多核处理器的启动时间影响较小

> searchresult.memberwiseclone将给你浅拷贝.它可能更快,不确定

>您可以只使用一个搜索结果并在使用前用正确的数据填充它吗?在这种情况下,不需要创建很多.只需使用一个作为可重复使用的容器.

>如果将控件添加到父表单中,则可以使用时间

> suspendlayout / resumelayout(这是win32)

>完成后,将父设置为不可见,然后返回可见状态

>还有另一种方法可以更快地完成同样的事情吗? (竞争控制,3D派对等)

0

精彩评论

暂无评论...
验证码 换一张
取 消