我有这段代码
Dim oCliente As New Net.WebClient()
Dim bHTML As Byte() = oCliente.DownloadData(Me.tbURL.Text)
Dim oUTF8 As New UTF8Encoding()
Me.tbShowArea.Text = oUTF8.GetString(bHTML)
和这一个
Me.tbShowArea.Text = UTF8Encoding.UTF8.GetString(New Net.WebClient().DownloadData(Me.tbURL.Text))
他们都做同样的事情。我想知道的是,使用它们的优点和缺点是什么?
答案 0 :(得分:2)
如果您正在寻找一行命令,那么请使用一个返回该值的函数,但是可以通过开发进行调试。
功能:
Private Function GetOnlineData(url As String) As String
Dim oCliente As New Net.WebClient()
Dim bHTML As Byte() = oCliente.DownloadData(url)
Dim oUTF8 As New UTF8Encoding()
Return oUTF8.GetString(bHTML)
End Function
用法:
Me.tbShowArea.Text = GetOnlineData(Me.tbURL.Text)
答案 1 :(得分:2)
两组代码中缺少的一个非常重要的方面是WebClient
实现IDisposable
这一事实,因此必须在使用后通过调用.Dispose()
将其丢弃。这是为了防止来自未解除分配的资源的内存泄漏。请记住,垃圾收集器会为您强烈地 致电.Dispose()
。您必须在您的代码中明确地调用它。
第一个代码块可以写成:
Dim oCliente As New Net.WebClient()
Dim bHTML As Byte() = oCliente.DownloadData(Me.tbURL.Text)
Dim oUTF8 As New UTF8Encoding()
Me.tbShowArea.Text = oUTF8.GetString(bHTML)
oCliente.Dispose()
或者,甚至更好,使用Using
作为:
Using oCliente As New Net.WebClient()
Dim bHTML As Byte() = oCliente.DownloadData("Me.tbURL.Text")
Dim oUTF8 As New UTF8Encoding()
Dim Me_tbShowArea_Text = oUTF8.GetString(bHTML)
End Using
第二段代码无法编写,无法调用.Dispose()
,因此应避免使用。
答案 2 :(得分:0)
使用第二种方法没有任何优势,如果您认识的代码不会再次紧凑,可能几乎不会减小项目大小和/或制作一部分。
就是这样。
至于缺点,它使调试和调整变得比应该更加困难。
答案 3 :(得分:0)
基本上,唯一的区别是第二个是链接函数,所以每一个都得到前一个处理它的结果并将它传递给下一个,而在第一个函数中将每个函数分配给变量。
您的代码没有真正的区别,但在其他情况下,您可能需要对相同的结果进行更多处理,在这种情况下,您使用该变量。我们假设您希望WebClient
做多件事。使用第一个,您可以执行以下操作:
Dim oCliente As New Net.WebClient()
Dim bHTML As Byte() = oCliente.DownloadData(Me.tbURL.Text)
Dim oUTF8 As New UTF8Encoding()
Me.tbShowArea.Text = oUTF8.GetString(bHTML)
bHTML = oCliente.DownloadData(Me.tbURL2.Text)
Me.tbShowArea2.Text = oUTF8.GetString(bHTML)
如您所见,我们重用变量来执行其他任务。你不能以第二种方式做到这一点,你将不得不重复整个事情:
Me.tbShowArea.Text = UTF8Encoding.UTF8.GetString(New Net.WebClient().DownloadData(Me.tbURL.Text))
Me.tbShowArea2.Text = UTF8Encoding.UTF8.GetString(New Net.WebClient().DownloadData(Me.tbURL2.Text))
现在想象一下你必须把它放在一个循环中。你只能用第一种方式做到这一点。