gpt4 book ai didi

c# - 重复使用带有 `using` 语句的局部变量与重复调用非局部变量?

转载 作者:太空宇宙 更新时间:2023-11-03 20:14:08 25 4
gpt4 key购买 nike

我刚刚注意到使用“使用”,因为它处理一次性元素的方式非常有效。因为它只会在特定命令中使用它们,所以它将被删除。

但我不知道限制在哪里,因为我看不到你总是想使用它,而且它总是高效的。

所以我的问题是。这是使用它的好方法,还是没有必要,甚至会以任何方式损害我的表现?

       void Sending(object sender, NAudio.Wave.WaveInEventArgs e)
{
using (UdpClient udpclient = new UdpClient())
{
if (connect == true && MuteMic.Checked == false)
{

udpclient.Send(e.Buffer, e.BytesRecorded, otherPartyIP.Address.ToString(), 1500);

}
}
}

这是一个来自 NAudio 的事件,它所做的是,当 WaveInEvent 有任何数据时,执行此操作。

WaveInEvent 来自输入设备,所以如果我开始用它录音(例如麦克风),数据将可用(麦克风音频),然后我可以用这些数据做我想做的事。在这种情况下,我通过 UDP 发送它。

但是如您所见,我使用的是本地 udpclient。我不知道我是否应该在那里使用它,或者我是否应该之前创建一个这样它可以一直重复使用它,而不是制作一个新的。

希望我没有把我的解释搞砸。

最佳答案

Is this a good way to use it, or is it unnecessary or will it even hurt my performance in any way?

当任何对象实现 IDisposable 时,您应该始终使用它。它对性能没有任何负面影响。它所做的只是确保正确处理该对象。

using 语句确保即使在您调用对象的方法时发生异常 时也会调用Dispose。您可以通过将对象放在 try block 中然后在 finally block 中调用 Dispose 来获得相同的结果;事实上,这就是编译器翻译 using 语句的方式。对于编译器,您的代码或多或少看起来像这样。

{
UdpClient udpclient = new UdpClient();
try
{
if (connect == true && MuteMic.Checked == false)
{

udpclient.Send(e.Buffer, e.BytesRecorded, otherPartyIP.Address.ToString(), 1500);

}
}
finally
{
if (udpclient!= null)
((IDisposable)udpclient).Dispose();
}
}

您可以阅读使用 here 的详细信息.

关于c# - 重复使用带有 `using` 语句的局部变量与重复调用非局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com