相关疑难解决方法(0)

NUnit [TearDown]失败 - 访问我的文件的进程是什么?

最终编辑:我找到了问题的解决方案(在问题的底部).

我有一个让你感到悲伤的Nunit问题.编辑:实际上它看起来更像是一个SQLite问题,但我还不是100%肯定.

我的TestFixture有一个设置,可以生成一个随机文件名,在我的每个测试中都用作SQLite数据库.

[Setup]
public void Setup()
{
    // "filename" is a private field in my TestFixture class
    filename = ...; // generate random filename
}
Run Code Online (Sandbox Code Playgroud)

我的每个测试都在访问数据库的每个方法中使用此构造:

[Test]
public void TestMethod()
{
    using (var connection = Connect())
    {
        // do database activity using connection

        // I've tried including this line but it doesn't help
        // and is strictly unnecessary:
        connection.Close();
    }
}

private DbConnection Connect()
{
    var connection = DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection();
    connection.ConnectionString = "Data Source=" + filename;
    connection.Open(); …
Run Code Online (Sandbox Code Playgroud)

sqlite nunit unit-testing ioexception

18
推荐指数
2
解决办法
3780
查看次数

在什么情况下,我们需要两次调用GC.Collect

我们有一个WPF应用程序,基于Unity和MMVVVM模式.在应用程序生命周期中,可能存在多个项目生命周期,在每个项目生命周期之后,我们执行手动拆除并尝试释放ViewModel的所有引用.对于使用Unity的事件订阅,我们使用弱引用.因此我们假设在拆除之后,我们可以调用GC Collect,以便所有垃圾对象都被垃圾收集.我们还有另一个手动取消订阅所有事件的选项,但我们更喜欢垃圾收集,因为它将为我们清除大约200MB,这将有助于新项目加载.

有一个实例,我们观察到,如果我只调用GC.Collect一次,它的引用仍然会在内存中保留一段时间.

GC.Collect();
GC.WaitForPendingFinalizers(); 
Run Code Online (Sandbox Code Playgroud)

但如果我尝试连续两次调用GC,它会很好地清理所有内容.

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)

任何想法或指示将受到高度赞赏.

更新:

Class中没有定义Finalizer.

现在我也在考虑一个案例,其中这个对象在另一个可能有终结器的对象中被引用.在我们的框架中,我们只有DBProvider的终结器,所以我不认为,即使是这种情况.

.net garbage-collection

10
推荐指数
2
解决办法
4413
查看次数