C# C.NET4.0中数据绑定设置时间缓慢

C# C.NET4.0中数据绑定设置时间缓慢,c#,winforms,performance,data-binding,C#,Winforms,Performance,Data Binding,我有个问题。我有一个动态生成布局的windows窗体应用程序,但性能有问题。在这种形式下,我使用.NET 4.0中的数据绑定和安装后的数据绑定,但他为一个控件绑定安装时间,大约0.7秒阻止我的应用程序。我有一些控制和宾果设置时间约为2分钟 我正在尝试所有可能的解决方案,如果不编写自绑定类,我就没有任何想法。 为什么我的代码有问题 case "Boolean": { Binding b = new Binding("Checked", __bindingsource, __ep.Name)

我有个问题。我有一个动态生成布局的windows窗体应用程序,但性能有问题。在这种形式下,我使用.NET 4.0中的数据绑定和安装后的数据绑定,但他为一个控件绑定安装时间,大约0.7秒阻止我的应用程序。我有一些控制和宾果设置时间约为2分钟

我正在尝试所有可能的解决方案,如果不编写自绑定类,我就没有任何想法。 为什么我的代码有问题

case "Boolean":
{
    Binding b = new Binding("Checked", __bindingsource, __ep.Name);
    CheckBox cb = new CheckBox();

    /*
     * HERE is the start of problem
     */

    cb.DataBindings.Add(b);

    /*
     * HERE is the end of problem
     */

    __flp.Controls.Add(cb);
    __bindingcontrol.AddBinding(b);
    break;
}
没有问题的代码行所有工作都很快,没有绑定;-但我想以正常速度打开绑定

PS1。我在生成时暂停了布局

PS2。我对绑定文本框、图片框也有同样的问题,复选框只是一个例子

如何做到这一点,或者更详细地说,如何调试问题,vs2010探查器说,唯一的问题是绑定,我知道这一点

System.Windows.Forms.Control.ControlCollection.Addclass System.Windows.Forms.Control System.Windows.Forms.ControlBindingsCollection.Addclass System.Windows.Forms.Binding
编辑:DataContext来自数据库。实体框架

不确定这是否是您案例中的问题,但如果绑定触发事件风暴,则可能会花费很长时间。也就是说,您绑定到控件A,这会触发控件B中的更改,这会触发控件A中的更改

需要检查的一件事是您正在更新的控件上的事件


另一件事是,从您的评论来看,您似乎在表单之间共享_绑定源。这可能是问题的根源。你为什么这么做?每个表单使用绑定源将使您的程序更易于管理。

我也遇到了这个问题。我在绑定类构造函数中将DataSourceUpdateMode设置为Never:这样性能就好得多了。如果不需要更新数据源,这是正确的方法

此性能问题是由激发的验证事件引起的。即使控件失去焦点或被单击,也会触发验证事件,这会大大降低应用程序的性能


编辑:虽然我没有绑定到EntityFramework,但性能非常差。将DataSourceUpdateMode设置为Never可减少激发的事件数。一旦将DataSourceUpdateMode设置为Never,更新将是单向的:从DataSource到Control

由于_bindingsource有许多元素,因此这项工作速度不快。绑定不能很好地处理大型集合,这是一个问题


__bindingsource是一个bindingsource类。而且必须有更少的元素来快速工作。我通过为每个BindingSet创建另一个新的BindingSource实例解决了这个问题。我的意思是只使用一个元素将一次多的元素绑定到一个对象的属性,这就是我想要使用的。

BindingSource在看什么?@Marc Gravell:\uuuBindingSource是一个System.Windows.Forms.BindingSource,他以其他形式声明并绑定到此表单中的DataGridView,而Dynamicly以构造函数参数传递到此表单。实体框架查询是惰性的,在您的情况下,这意味着它们仅在绑定时执行,除非您以前强制运行过,顺便说一句,它们甚至可能在绑定时执行两次。因此,如果查询很复杂,您将在您提到的行中逻辑地看到性能问题。那么,你能给我们展示一下你的查询的构造逻辑,以及有关体积测量的指示吗?@Marcanpilami:我尝试了这个,我给你反馈,但是你有没有办法取消实体框架的标记-@Svisstack:要强制执行,只需使用Execute函数并绑定到函数结果。您也可以使用任何导致IEnumerables求值的函数,例如ToList,但在这种情况下,不可能创建双向绑定。我使用相同的bindingsource,因为我希望通过绑定导航器迭代表中的元素,但如果这是问题的根源,我可以忘记此选项。我会在明天分析你的帖子并给你结果反馈。绑定上下文来自实体框架,这对解决这个问题可能有价值吗?包括:从此DataContext加载到DridGridView的数据是立即加载的。我必须使用验证数据从数据源一次绑定到控件,并始终从控件一次绑定到数据源,因为在其他情况下,我接受sql错误。