using(DataTable dt = ***)
{
    Cache["**"] = dt;
}执行完后 Cache["**"]指向的 dt 还存不存在??
或者说 再次掉用 Cache["**"] 能否获取到 dt数据

解决方案 »

  1.   

     Cache["**"]  这个跟 using没有关系。
    using(datatable dt = **)
    {}只是表示出了using结尾的}之后,这个dt就会被回收。
    所以dt是不存在,而缓存是存在的。
      

  2.   


    DataTable dt2 = (DataTable)Cache["**"]
    dt2 能获取到数据?dt 是引用类型的吧
    Cache["**"] 中存放的是 dt的引用
    dt被回收了 通过引用Cache["**"]还能得到数据??
      

  3.   

    两个没有关系吧……using只是针对dt的,又不是cache的。cache不存在,看看你的dt有没有数据,或者看看你后面执行的操作是不是清空了cache
      

  4.   

    可以得到dt,但是继续使用它是危险的。
    好比如下代码:Cache["**"] = dt;
    dt.Dispose();
    Cache["**"].xxxx //再访问dt是危险的,dt已经被释放了。
      

  5.   

    这类问题的判断标准是你要看:“是否知道Dispose方法里到底执行了什么?”。对于那些根本不知道Dispose方法里执行什么的人,可能只会吓唬自己,根本不知道“释放”是什么具体含义。
      

  6.   


    对呢!我晓得dt会执行Dispose方法,但是不一定会立即被释放掉,到底怎么样才会被释放掉我不明白!所以我才担心 再次 Cache["**"] 会得不到数据