我想檢測我的代碼是否生成垃圾。所以我創建了下面的單元測試。在單元測試中檢測垃圾
[TestClass]
public class AllocationTest
{
int[] generationCollections = new int[3];
[TestMethod]
public void TestGarbageGeneration()
{
generationCollections[0] = GC.CollectionCount(0);
generationCollections[1] = GC.CollectionCount(1);
generationCollections[2] = GC.CollectionCount(2);
// Test for garbage here
for (int generation = 0; generation < generationCollections.Length; generation++)
{
Assert.AreEqual(GC.CollectionCount(generation), generationCollections[generation]);
}
}
}
我把有問題的代碼放在「測試垃圾在這裏」的評論是,結果是不可預知的。我的理解是,這是由於GC運行在一個單獨的線程上,並且可以隨時由除我的測試以外的代碼觸發。
我試着GC.Collect在測試代碼之前和之後強制運行集合,但後來認識到總是會增加集合計數,所以測試總是失敗。
是否有一種有意義的方式來測試單元測試中的垃圾?
可能重複[是否有可能配置單元測試內存使用情況?](http://stackoverflow.com/questions/2930172/is-it-可能的配置文件內存使用的單元測試) – 2013-04-20 19:49:14
「總是增加收集計數」,是的,但只是通過+1 ?? – GameAlchemist 2013-04-20 20:14:39