这两种vb .Net编码方式之间的区别是什么?

时间:2015-11-15 04:48:20

标签: vb.net

我有这段代码

    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))

他们都做同样的事情。我想知道的是,使用它们的优点和缺点是什么?

4 个答案:

答案 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))

现在想象一下你必须把它放在一个循环中。你只能用第一种方式做到这一点。