c# - Using with inner using 的正确使用方法

标签 c# .net using

<分区>

我正在从 URL 下载一些 XML 字符串,我需要解析它。所以,我有以下语法:

// Code Section 1    
using (var webClient = new WebClient())
{
    response = await webClient.DownloadStringTaskAsync(new Uri(myUrl));
}

SyndicationFeed myFeed;
using (XmlTextReader reader = new XmlTextReader(new StringReader(response)))
{
    myFeed= SyndicationFeed.Load(reader);
}

if(myFeed != null)
{
    // Do something
}

但是,一位队友提出了一个问题,如果我这样做,代码看起来会更好

// Code Section 2
using (var webClient = new WebClient())
{
    string response = await webClient.DownloadStringTaskAsync(new Uri(myUrl));

    using (XmlTextReader reader = new XmlTextReader(new StringReader(response)))
    {
        SyndicationFeed myFeed= SyndicationFeed.Load(reader);
        if(myFeed != null)
        {
            // Do something
        }
    }   
}

从逻辑上讲,它们执行相同的任务,可能会对性能产生一些影响。

我的问题是:

  • 使用 using 和内部 using 的正确方法是什么?
  • 我是否应该尽快“释放”内存,这意味着在 using 中放置尽可能少的逻辑?

最佳答案

What is the correct way of using using with an inner using?

好吧,您在这里没有内部 using。您的两个 using block 是完全独立的。

如果您两个依赖的using block (例如数据库连接和记录集),您的第二种方法将是强制性的。

现在,这是一个风格问题。严格来说,第一种方法要好一些,因为它更早地处理资源,但在这种情况下,它真的无关紧要。选择您最喜欢的那个。

关于c# - Using with inner using 的正确使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36650473/

相关文章:

c# - 禁用最小化按钮,但保留交叉和最大化按钮 - WPF、C#

c# - AES 托管提供程序默认值

.net - 具有 Entity Framework 的 Sqlite - 错误 : "Specified cast is not valid"

C# 等效于 Java 中的 ByteArrayOutputStream

c# - 在 .NET Framework 中将 .NET Standard 库与 Windows 兼容包结合使用

c# - 注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\是否显示所有子项

.net - 在 Orchard 中包含 css 文件

c++ - 如何阻止新表单使用命名空间 System::Collections

python - Django:不同数据库中的 save() 方法

c++ - 是否可以嵌套现有枚举类