据我目前所知,dataset其实就是物理数据库在内存中的一个映射。这样,就可以直接通过dataset提供统一的接口方便的操作数据库中的数据。在使用dataset之前需要,需要fill方法,将数据库中的数据填充到dataset中。那么,我的疑问就在这里。如果数据库中的某个表的数据量很大(假设几个TB,内存装不下),而且dataset中的某个datatable对应这张物理表。那么fill方法执行的结果是什么?如果都填入内存,内存肯定吃不下,但是如果不是这样,那内存中到底发生了什么?

解决方案 »

  1.   

    微软的架构师不会这么傻,它应该考虑到这个问题。
    对这个问题,个人认为dataset的实现,采用了代理设计模式,dataset是物理数据库的代理,datatable是某个具体表的代理,实例化这些对象之前,他们只将少量物理数据加载到内存中来,在程序运行过程中,自动去加载一些当前不在内存中的数据获取同步当前的数据到数据库中,不过这一切都是对用户透明的。队用户而言,就像是直接操作数据库一样。
    这只是我个人的理解,如有错误,还希望大家多多指教。
      

  2.   

    没有所谓的代理,如果有,那么,dataset就要和数据库保持长连接,才能方便取数据.但事实并非如此.不然dataset怎么又叫离线数据库呢.