чем тебя не устраивают для сравнения два примера в вопросе этой темы?
Чем не усраивают 2 примера??? Я бы на твоем месте на называл то, что ты написал этим громким словом-пример! И причины тому следующие:
1.Расскажи мне глубокий смысл использования тобой структуры POINTAPI? Какую роль она играет в этом примере?
2.Также не понятен глубокий смысл массива pointsArray(1) As POINTAPI! Вот скажи мне какими мыслями ты руководствовался когда создавал этот массив? Ты сначала засовываешь переменные в массив pointsArray(0).x = X : pointsArray(0).y = Y, а потому тут же, в следующе строчке достаешь их оттуда.. CreateRectRgn(pointsArray(0).x, pointsArray(0).y Ну и нафига спрашивается? Это как то ускоряет работу?
3.Тут ты получаешь цвет If GetPixel(hdc, X, Y) = 0 Then , и это значит что цвет пиксела, а равно как и его составляющих (АRGB), у тебя уже есть на руках! И вместо того, чтобы инвертировать какждую составляющую и зделать SetPixel ты а. создаешь Region величиной в ОДИН пиксел(а между тем создание Region есть очень и очень ресурсоемкая процедура) б. инвертируешь его в. освобождаешь ресурсы. Этот тоже по твоему глубокому замыслу както прибавит скорости??
И при всей кривизне твоего кода NET дает лучшие результаты (по результатм GSerg'a)
Так что, уважаемый, рановато тебе еще тестированием заниматься, и делать какие либо выводы, а тем более утверждать что либо, относительно скорости работы того или иного языка
А если тебе так хочется протестировать, то можешь попробовать этот вариант.. Подход другой, но результат то же..
О результатах тестирования сообщишь в студию..
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim Start As Integer = System.Environment.TickCount
Dim _bitmap As New Bitmap(500, 200)
Dim _graph As Graphics = Graphics.FromImage(_bitmap)
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Command1_Click()
Dim s As Long
s = GetTickCount
Dim i As Integer
For i = 1 To 10000
Dim d As Long
Dim dd As Long
Dim p As POINTAPI
p.x = 0
p.y = 0
d = CreatePen(0, 1, 0)
dd = SelectObject(hdc, d)
MoveToEx hdc, p.x, p.y, p
LineTo hdc, 100, 100
d = SelectObject(hdc, dd)
 eleteObject (d)
Next i
MsgBox GetTickCount - s
End Sub
и этот:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim d As Integer = System.Environment.TickCount
Dim f As Int32
For f = 1 To 10000
Dim s As System.Drawing.Graphics = Me.CreateGraphics
s.DrawLine(Pens.Black, 0, 0, 100, 100)
s.Dispose()
Next f
MsgBox(CStr(System.Environment.TickCount - d))
End Sub
End Class
а то, о чем ты возмущаешься не принципиально, поскольку сравниваются скорость работы АПИ, которая идентична в приведенных кодах...
3.Тут ты получаешь цвет If GetPixel(hdc, X, Y) = 0 Then , и это значит что цвет пиксела, а равно как и его составляющих (АRGB), у тебя уже есть на руках! И вместо того, чтобы инвертировать какждую составляющую и зделать SetPixel ты а. создаешь Region величиной в ОДИН пиксел(а между тем создание Region есть очень и очень ресурсоемкая процедура) б. инвертируешь его в. освобождаешь ресурсы. Этот тоже по твоему глубокому замыслу както прибавит скорости??
этот код был предназначен на последовательное прохождение каждого пиусела, проверка его на цвет и если цвет = тому-то, то этот пиксел rgn-ируем, чтобы потом setwindowrgn...
но я на полпути остановился, т. к. скорость этого действа оставляла желать лучшего...
Тестировали ничего не значащий и бесполезный код.
Расскажи мне глубокий смысл
Я раскрыл тебе смысл?
Единственный смысл был в том, что в этом коде есть АПИ и он работает, а значит его можно тестить на скорость.
В тестровании на скорость не важно то, с какой это делается целью!
Важно, с какой скоростью это делается
Во всех тестированиях на скорость используются циклы. Так почему же ты не спросил, с какой целью 10000 раз повторять одно и то же действие? Без смысла
Вот и здесь не было смысла, кроме проверки скорости
Блин.. да при чем тут вообще АПИ??? Платформа NET принципиально не предназначена к работе с ними.. В ней и был сделан основной упор на то,чтобы избавиться от прямого вызова неуправляемого кода.. И если решить задачу нормальными ручками, а не кривыми, и не через АПИ а с помощью встроенных средств, то 6-ка будет не только пыль глотать, а дерьмо кушать!!
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim d As Integer = System.Environment.TickCount
Dim f As Int32
For f = 1 To 10000
Dim s As System.Drawing.Graphics = Me.CreateGraphics
s.DrawLine(Pens.Black, 0, 0, 100, 100)
s.Dispose()
Next f
MsgBox(CStr(System.Environment.TickCount - d))
End Sub
End Class
но я на полпути остановился, т. к. скорость этого действа оставляла желать лучшего...
А чего ты ожидал??? Мало того что ты попиксельно проходишь, так еще при каждой итерации создаешь регион и потом уничтожаешь его!!! повторяю еще раз.. Создание региона это ОЧЕНЬ ресурсоемкая операция!!! и создавать его для каждого пиксела в отдельности есть не что иное как огромная глупость.
В ВБ6 - это единственная возможность сделать окно в форме того, что на нем нарисовано, если рисунок произвольный
А в NET это делается 1 строчкой!!! И повторяю еще раз:
НЕ НАДО ПЫТАТЬСЯ ПЕРЕНЕСТИ УРОДЛИВЫЕ РЕШЕНИЯ С 6-КИ В НЕТ!!!!
НЕТ- это абсолютно другая философия и абсолютно другой подход!
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim n As Long
n = GetTickCount
Dim i As Integer
For i = 1 To 10000
Line (0, 0)-(100, 100), 0
Next i
MsgBox (GetTickCount - n)
End Sub
знаешь что... утомил ты меня.. забудь, все что я тебе говорил.. и пиши на шестерке.. я не собираюсь ничего тебе доказывать, и ни в чем тебя убеждать...
Удачи!
знаешь что... утомил ты меня.. забудь, все что я тебе говорил.. и пиши на шестерке.. я не собираюсь ничего тебе доказывать, и ни в чем тебя убеждать...
ну, извини меня ЛАМЕРа, кстати ты с GSergом, которого я тоже видать утомил, и так сказали достаточно, чтобы склонить меня в пользу VB.Net. И на том спасибо!
А тестирование провалилось,я думаю потому что я компилил в debug... не важно короче...
Сказал бы лучше за сколько времени выполнился твой код у тебя...
Удачи!
Спасибо!
Главное трудно обучать ламера с нуля, обладя большимм знаниями и ожидать от него больщих результатов. Надеюсь, что когда я наберу опыта, мы еще с тобой пересечемся