【问题标题】:Why should I call Dispose on DataContainer or DataContext while it seems it doesn't differ?为什么我应该在 DataContainer 或 DataContext 上调用 Dispose,而它似乎没有什么不同?
【发布时间】:2011-08-12 15:50:08
【问题描述】:

我创建了一个简单的测试程序来找出调用 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();
}

两种方法的结果相同。 我的 PC 上的结果是大约 27.22 秒和大约 37.7 MB 的私有内存大小。

现在我为什么要为 DataContainers 调用 Dispose,而它没有区别?

提前致谢。

【问题讨论】:

    标签: performance entity-framework memory disposable data-containers


    【解决方案1】:

    我想 Model.SampleEntities 返回一个 IDisposable 是有充分理由的 - 可能已正确清理托管和/或非托管资源等

    【讨论】:

    • 我知道,但这些资源是什么?为什么处理它们不会影响性能?
    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多