客户端(C) 服务端(S) 请求查询的表数据数量(7千万条左右)
C通过socket向S发送一个查询数据的请求,这个时候S执行查询操作。问题一:S应该如何把这么庞大的数据发送到C?(我已经想到用循环发送,这时候就遇到了问题二)问题二:如果S通过循环每次发送一条数据给C,但是C是通过线程来启动的Socket,并且C#线程不能直接访问控件,这个时候如何将每条数据都添加到dataview表格中?(我想到在线程中使用多维数组来存储每次接收到的数据,然后全部接受完的时候 用一个监听方法来把数组中的数据读取到dataview中,这时候遇到了问题三)问题三:多维数组到底能存储多少数据?如何按照实际的数据来初始化这个庞大的数组?

解决方案 »

  1.   

    其实很简单。我知道方向。但我不知道实现,因为没做过。server收到请求后,进行查询,结果返回的存储在DataTable,然后序列化成字节流进行发送,对方接受完毕后,反序列化为DataTable,吧这个对象设置给DataGridView的DataSource属性。没实际做过数据库,没例子给你。搜索一下吧。
      

  2.   

    问题一,查询结果如果很大,建议分页,不要一次传太多.
    问题二,dataview动态绑定数据
    问题三,存多少取决于你的机器配置,7千万数据都放内存里也不是什么好事儿,
    根据实际的数据量的增加而增加,增量按百分比或者固定大小递增.
      

  3.   

    就算你把所有的数据都加载到dataview, 做什么? 这么大的数据量,加载到内存有什么用?难道是用来展示?不会吧?谁想看?
      

  4.   

    当时做过winsock传图片的功能,思路是数据太大就分块传。
      

  5.   

    1:用分页,分次传输,每次传输若干条记录。
    2:多线程操作界面要用委托
    3:没必要考虑这个问题,每次传送一定量的数据即可,比如,1024.
    另外,为什么要用socket?为何不用webservice?
      

  6.   


    这样设计很烂的,你要转换思路!!!
    1。你为什么要思考吧7千万条数据一次发过来?即使发过来了,你什么界面能一次显示7千万条?就算你显示出来了,什么人能一次看七千万条?
    所以,你思路走入了死胡同了!很简单!!分页!!!!分页!!!
      一次传几页过来,客户需要看下一页的时候再传送新的页过来!!!2。C#可以直接访问控件,这个没问题。只是要用一点判断和委托。
    3。数组能存储的数据和你的内存有关系,即使内存不够,还有虚拟内存给你用,理论上2G是可以的。但是这只是理论,没有哪个设计师会真的占用2G内存!!!
    七千万条数据啊,就算一条数据20个字节,都是1G好远了吧?综上,你的设计必须修改!