良い一日!
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を使用します。しかし、オブジェクトを破棄してnullに設定すると(checkProcess)、参照をクリアしたので、それへの唯一の参照はアクセサーからのものです-なぜそれを収集できないのですか?コピーではなく、実際のオブジェクトを保持します。