使用“using”语句重复使用本地变量与重复调用非本地变量
本文关键字:变量 调用 using 语句 使用 | 更新日期: 2023-09-27 18:26:19
我刚刚注意到使用"using",因为它处理一次性对象的方式非常有效。由于它只会在特定的命令中使用它们,因此它将被删除。
但我不知道极限在哪里,因为我看不出你总是想使用它,而且它总是有效的。
所以我的问题是,这是一个好的使用方式,还是没有必要,甚至会以任何方式影响我的表现?
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。我不知道我是否应该在那里使用它,或者我是否应该之前创建一个,这样它就可以一直重用它,而不是制作一个新的。
希望我没有把我的解释搞砸。
这是一个好的使用方式吗,还是没有必要,甚至会以任何方式影响我的表现?
当任何对象实现IDisposable时,都应该始终使用它。它不会对性能产生任何负面影响。它所要做的就是确保对象得到正确处理。
using语句确保调用Dispose,即使在对对象调用方法时发生异常也是如此。您可以通过将对象放入try块中,然后在finally块中调用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();
}
}
您可以在此处阅读使用的详细信息。
正如Microsoft所说,通常"当您使用IDisposable对象时,您应该在using语句中声明并实例化它。"using statement(C#Reference)-MSDN-Microsoft。但有时,最好将对象定义为非局部变量,并在需要时在本地代码中调用它,而不是每次使用对象时都实例化它然后处理它。在您的情况下,因为您希望使用UdpClient
不断发送数据,重复实例化和处理对象(这是由using
语句完成的),可能会降低性能(用你的话来说,会影响你的性能:);所以我更喜欢在我的应用程序中定义一个非局部变量,随时调用它,然后在不再需要时调用Dispose
。