相关疑难解决方法(0)

在.Net C中释放资源#

我是C#和.NET的新手,并且一直在阅读它.

我需要知道为什么以及何时需要释放资源?垃圾收集器不能处理所有事情吗?我什么时候需要实现IDisposable,它与C++中的析构函数有什么不同?

另外,如果我的程序相当小,即屏幕保护程序,我是否需要关心释放资源?

谢谢.

.net c# resources memory-leaks

13
推荐指数
2
解决办法
8179
查看次数

线程不活动时释放资源

我正在使用 BackgroundWorker 并在其中使用 foreach 循环,在其中我创建新线程,等待它完成,然后报告进度并继续 foreach 循环。这就是我要说的:

private void DoWork(object sender, DoWorkEventArgs e) {
            var fileCounter = Convert.ToDecimal(fileNames.Count());
            decimal i = 0;
            foreach (var file in fileNames) {
                i++;
                var generator = new Generator(assembly);

                var thread = new Thread(new ThreadStart(
                        delegate() {
                            generator.Generate(file);
                        }));
                thread.SetApartmentState(ApartmentState.STA);
                thread.Start();
                while (thread.IsAlive); // critical point
                int progress = Convert.ToInt32(Math.Round(i / fileCounter * 100));
                backgroundWorker.ReportProgress(progress);
            }
        }
Run Code Online (Sandbox Code Playgroud)

问题是线程完成后(通过“临界点”线后)内存没有被释放。我认为当线程不活动时,与它相关的所有资源都会被释放。但显然这不是真的。任何人都可以向我解释为什么以及我做错了什么。谢谢。

c# multithreading backgroundworker

1
推荐指数
1
解决办法
3016
查看次数