我在一个线程里用
NetworkStream ns = client.GetStream();
StreamReader sr = new StreamReader(ns);
具体意思不清楚也没关系,反正就是把一个IO句柄赋给StreamReader,然后我不关闭这个StreamReader,因为我还要用这个IO句柄,然后在另外一个线程里继续用这个句柄,这样会内存泄露吗?
就是在几个个线程里先后用StreamReader读取同一个句柄,放到一个极限情况,A线程先读,读完了线程退出,但是StreamReader不能close,句柄传递给B线程,B线程读,B线程读完了线程退出,C线程读……依次循环读100个线程,在这样一个极限情况下,这100个StreamReader是不是要等句柄关闭了才被释放C#的垃圾回收只回收无主对象,这样的StreamReader似乎是有主的,我期望的情况当然是每个线程退出的时候把自己的StreamReader关闭掉,而不是等第100个线程读完了,句柄关闭的时候再回收,这样就属于内存泄露了。
NetworkStream ns = client.GetStream();
StreamReader sr = new StreamReader(ns);
具体意思不清楚也没关系,反正就是把一个IO句柄赋给StreamReader,然后我不关闭这个StreamReader,因为我还要用这个IO句柄,然后在另外一个线程里继续用这个句柄,这样会内存泄露吗?
就是在几个个线程里先后用StreamReader读取同一个句柄,放到一个极限情况,A线程先读,读完了线程退出,但是StreamReader不能close,句柄传递给B线程,B线程读,B线程读完了线程退出,C线程读……依次循环读100个线程,在这样一个极限情况下,这100个StreamReader是不是要等句柄关闭了才被释放C#的垃圾回收只回收无主对象,这样的StreamReader似乎是有主的,我期望的情况当然是每个线程退出的时候把自己的StreamReader关闭掉,而不是等第100个线程读完了,句柄关闭的时候再回收,这样就属于内存泄露了。
本来我只想要一个socket句柄,但是现在是不是意味着每个socket句柄后面都有100个StreamReader,那么如果有100个连接,我的程序里是不是就存活了10000个StreamReader,这些StreamReader会吃进多少内存呢?
那么当然一个线程一个StreamReader, 这种情况你也没法共享一个StreamReader.如果是串行执行的... 当然可以只有一个StreamReader.
比如设一个静态的StreamReader, 用一个计数器,记录线程使用情况, 没有使用了就彻底清理资源.