Почему я должен вызывать Dispose для DataContainer или DataContext, когда кажется, что он не отличается? - PullRequest
0 голосов
/ 12 августа 2011

Я создаю простую тестовую программу, чтобы выяснить разницу памяти и скорости между вызовом Dispose и не вызывать его для объекта DataContainer.

Вот моя тестовая программа:

static void Main(string[] args)
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();

    for (int i = 0; i < 5000; i++)
    {
        // I change the following call with Method1 and run it again
        var res = Method2();
        int count = res.Count;
    }

    stopwatch.Stop();
    Console.WriteLine(stopwatch.Elapsed);
    Console.WriteLine("Mem: " + System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64.ToString("N"));
    Console.ReadKey();
}

private static IList Method1()
{
    using (var db = new Model.SampleEntities())
    {
        var result = db.People.Where(p => p.Name.StartsWith("a")).Take(1);
        return result.ToList();
    }
}

private static IList Method2()
{
    var db = new Model.SampleEntities();
    var result = db.People.Where(p => p.Name.StartsWith("a")).Take(1);
    return result.ToList();
}

Результатыодинаковы для обоих методов.Результат на моем ПК составил около 27,22 секунды и около 37,7 МБ размера личной памяти.

Теперь, почему я должен вызывать Dispose для DataContainers, пока он не отличается?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 августа 2011

Я представляю, что Model.SampleEntities возвращает IDisposable по уважительной причине - он правильно очищает управляемые и / или неуправляемые ресурсы и т. Д.

...