Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试访问器垃圾回收_C#_.net_Garbage Collection_Coded Ui Tests - Fatal编程技术网

C# 测试访问器垃圾回收

C# 测试访问器垃圾回收,c#,.net,garbage-collection,coded-ui-tests,C#,.net,Garbage Collection,Coded Ui Tests,你好 我正在VS2010中使用MSTest。为什么在测试执行后不会对访问器进行垃圾收集?这是我的密码。这很简单 [TestClass] public class CheckStringsWorkTest { CheckProcess checkProcess = null; CheckProcess_Accessor checkProcess_Accessor; [TestMethod] public void StringShaveTest() { //

你好

我正在VS2010中使用MSTest。为什么在测试执行后不会对访问器进行垃圾收集?这是我的密码。这很简单

[TestClass]
public class CheckStringsWorkTest
{
  CheckProcess checkProcess = null;
  CheckProcess_Accessor checkProcess_Accessor;

  [TestMethod]
  public void StringShaveTest()
  {
        // MessageBox.Show("Start snapshot 1");

        checkProcess = new CheckProcess();

        checkProcess_Accessor = new CheckProcess_Accessor(new PrivateObject(checkProcess));

        checkProcess.Dispose();
        checkProcess = null;
  }

  [TestCleanup()]
  public void RunAfterAllTests()
  {
     // If uncomment then GC is OK
     //checkProcess_Accessor = null; 

     try
     {
         GC.Collect();
         GC.WaitForPendingFinalizers();
         GC.Collect();
     }
     catch { }

     // MessageBox.Show("Start snapshot 2");
 }

据我所知-访问器使用PrivateObject作为包装器来保存实际对象。但如果我dispose并将object设置为null(checkProcess),则清除了引用,因此对它的唯一引用是来自访问器-为什么不能收集它?它保存的是实际对象,而不是它的副本。

您没有将类中的checkProcess\u Accessor字段置空,因此它仍然有效,并且它链接到的所有内容都是活动的,无法收集

PrivateObject显然保留了对它所传递的checkProcess的引用,反过来,checkProcess\u访问器必须保留对PrivateObject的引用。您仍然可以通过访问器和PrivateObject访问checkProcess(尽管如果所有引用都是私有的,您可能需要使用反射来访问),因此无法收集对象

顺便说一句,试图强制垃圾收集是一个非常糟糕的主意,但我相信你这样做是有充分理由的