项目中有一个查询的功能,但这个功能不要分页,要全部都显示在当前窗体上。数据量至少上千条,随便选两个条件就可能上万条。之前这些数据是用一个第三方控件已列表形式展现的。由于需求变了,显示的时候会有多级和并列的问题,那个第三方控件无法满足需求,用GridView做的话也不是很容易,所以后来决定通过分析数据,动态生成HTML,然后用WebBrowers加载显示。由于做的时候用的是开发库,所以没有那么大的数据量,不会出现什么问题,但是到了测试库里,数据量很大,当数据打到显示3000多条还是没问题的,但是到了5000多条的时候,就会报“ContextSwitchDeadlock”异常(调试状态),查了一下MSDN,好像有两个原因,第一个看不懂,第二个貌似是说有死循环,这个肯定不会有死循环的,因为小数据量是可以显示的。现在很疑惑呀对了,当初以为我是动态拼HTML拼的有问题,后来拿以前用第三方控件那个版本测试了一下,同样在大数据量时会出现问题,不知道如何解决了。请大家帮忙。

解决方案 »

  1.   

    在vs2005环境中,debug菜单--〉Exception,把ContextSwitchDeadlock选项勾掉。
      

  2.   

    <asp:GridView ID="GridView1" runat="server" EnableViewState =false 
        </asp:GridView>
    这个实验下  这样会在跳转时候  不必进行回发操作  稍微能快一点点
    但是我还是建议不要将所有数据全部显示在页面上
      

  3.   


    不是等等,我这个是Winform。
      

  4.   

    楼主应该是个WinForm程序吧,为了显示这个报表弄了个APS.NET的程序,用WebBrowser展现这张报表?是这个意思么?如果是,那么建议你继续使用DataGridView吧,使用异步线程机制可以解决,别绕弯路了,越绕越弯,异步实现的时候你控制的内容很多,编程实现复杂点,你需要控制滚动时数据如何更新,如何将数据异步添加到DataGridView。如果是ASP.NET的,建议你使用AJAX逐步加载数据。
    上面提供思路,具体实现希望楼主能够自己动手完成,本人不提供代码,谢谢。
      

  5.   

    恩,是WinForm,不过不是弄了一个ASP.NET的程序,而是自己拼了一段HTML,纯文本,然后WebBrowers.DocumentText=HTML纯文本,就是自己在后台拼了一个大字符串。然后付给WebBrowers是这么个过程。那你现在还认为和用什么显示有关吗?
      

  6.   

    EnableViewState =false 赞同, 还有就是分页
      

  7.   

    分析一下你的问题,看看是查询数据有问题,还是显示数据有问题。
    如果是显示数据有问题,因为是winform,可以选择的比较多,首选的应该是自己做一个显示控件,重写onpaint事件,自己画,这样性能不会很低,而且一切尽在掌握中。有条件的话,使用现有的三方控件也可以,你再找一个符合条件的就是了。
    如果是查询数据有问题,那就很麻烦,需要看具体代码了。
      

  8.   


    查询是没有问题的,都跟过,拿到一个大约5000条的List是没有问题的,就是之后显示的时候除了问题
      

  9.   

    “调试”“异常”“Managed Debugging Assistant”下,将异常的勾去掉
    上下文是否有死锁,检查显示