Problém je, že se v praxi uplatňuje spíš rychlost vnímaná uživatelem, a ta je v případě -NETu citelně menší, než u klasických aplikací. Před časem jsem to demonstroval na jednoduchém benchmarku, který nastavuje v několika cyklech hodnoty RadioButtonu na WindowsForms panelu.
http://vbnet.aspweb.cz/guibench/ Imports System, System.Drawing, System.Windows.Forms
Public Class frmGuiBenchmark: Inherits Form
Private WithEvents L As New Label(), P As New Panel()
Private Const N = 15
Private RB(N, N) As RadioButton, i%, j%
Shared Sub Main()
Application.Run(New frmGuiBenchmark())
End Sub
Sub New()
L.Dock = Dock style.Top
L.Size = New Size(400, 16)
L.Font = New Font("Arial", 8)
L.Text = "Single click here to start the benchmark"
L.TextAlign = ContentAlignment.MiddleCenter
P.Dock = Dock style.Fill
P.Location = New System.Drawing.Point(0, 16)
Controls.Add(L): Controls.Add(P)
Size = New Size(400, 368)
For i = 0 To N
For j = 0 To N
RB(i, j) = New RadioButton()
RB(i, j).Left = 5 + i * 30 : RB(i, j).Top = 5 + j * 20
RB(i, j).Width = 10 : RB(i, j).Height = 10 : RB(i, j).Tag = " " & i & " " & j
AddHandler RB(i, j).Click, AddressOf RB_Click
P.Controls.Add(RB(i, j))
Next
Next
End Sub
Private Sub RB_Click(S As Object, EA As EventArgs)
L.Text = S.ToString & S.tag
End Sub
Private Sub L_Click(S As Object, EA As EventArgs) Handles L.Click
Dim tSta& = Date.Now.Ticks, Rnd = New Random(), it%
L.Text = "Start: " & tSta : Application.DoEvents()
For it = 0 To 1000
i = Rnd.next(N) : j = Rnd.next(N)
RB(i, j).Checked = True
Next
L.Text = "Stop: " & (Date.Now.Ticks - tSta)
L.Text = (Date.Now.Ticks - tSta) / 10000000.0 & " sec"
End Sub
End Class
Časy pro VB.NET, MS VJM a Visual Basic 6.0 jsou 1.17, 0.43 a 0.31 sekund (čili v GUI je VB.NET 4x pomalejší, než VB6) a kupodivu (v rozporu s vžitými představami o pomalosti Javy) i 3x pomalejší, než MS Java! Problém je, že v případě komplexnějších aplikací uživatel nepříznivě vnímá odezvu GUI (u DB aplikací je jinak rychlost málo závislá na FLOPS apod., spíš na odezvách databáze nebo webové služby). Odpovídající zdroják VB6 je zde, zdroják Javy je na linku.
Const N% = 15
Private Sub Form_Load()
Dim i%, j%, ii%
For i = 1 To N
For j = 1 To N
ii = ii + 1
Load RB(ii): RB(ii).Visible = True
RB(ii).Move 5 + i * 30, 5 + j * 20
Next j
Next i
End Sub
Private Sub Form_DblClick()
Dim tSta!: tSta = Timer
For it = 0 To 1000
i = Fix(Rnd * N): j = Fix(Rnd * N)
RB(i + j * N).Value = True
Next
L = Timer - tSta
End Sub