Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

 

  Вопрос: DLL из FreeBasic в Visual Basic6.0 Добавлено: 22.12.06 10:24  

Автор вопроса:  Сергей Юдин

Ответить

  Ответы Всего ответов: 77  

Номер ответа: 61
Автор ответа:
 Сергей Юдин



Вопросов: 8
Ответов: 81
 Профиль | | #61 Добавлено: 09.01.07 19:04
Я могу прояснить для Вас отдельные моменты, но переписывать - увольте, своих забот полно.


Спасибо, что хоть в этом не отказали убогому. Да мне собственно всего два момента и не понятны, а именно по Try...Catch...Finally и по предложению использовать метод SetPixel. Что касается Try...Catch...Finally, то я действительно не знаю, что это такое и почему эти операторы должны исчезнуть в обозримом будущем. Хотя если это произойдет, то будет очень прискорбно, т.к. оператор GOTO просто не заменим при анализе логики функционирования математической модели. Ведь модели бывают такими сложными, что применение навороченной конструкции IF THEN ….ELSE….ELSE …, может так запутать и без того сложный анализ поведения системы при отладке кода самой модели, а не второстепенного кода, что вообще концов не найдешь.

А вот с методом SetPixel не все так просто. Вы ведь сами мене писали, когда я только собирался делать программу на VBNET по подобию программы на C++, где и графика и текст выводились в одно окно http://www.vbnet.ru/forum/show.aspx?id=121069

<<что вызывать метод <c>Graphics.DrawString</c> необходимо в событии <c>Paint</c> того объекта, на котором рисуешь! В противном случае изображение тут же будет перерисовано
полностью или частично при любом обновлении экрана
Private Sub PictureBox1_Paint(ByVal sender As Object, _
                                  ByVal e As System.Windows.Forms.PaintEventArgs) _
                                  Handles PictureBox1.Paint

        e.Graphics.DrawString("GDI+ Test VS 2005", _
                     New Font("Arial", 12, FontStyle.Italic Or FontStyle.Bold), _
                     Brushes.Red, 2, 2)
    End Sub>>

Но, т.к. мне надо было, чтобы изображение не полностью обновлялось в PictureBox1, где у меня нанесена координатная сетка и возможно изображены направляющие, то Вы посоветовали сделать так

<<Если же необходимо это сделать в каком - либо другом событии, то как правило поступают следующим образом:
- Создается объект Bitmap из картинки, которая находится в PictureBox, либо из файла
- Рисуешь,пишешь,чертишь там что душе угодно
- Потом загоняешь всю эту эту прелесть в Image своего PictureBox'а...
При таком подходе твоя картинка будет статична и никакие обновления экрана ее не сотрут и не изменят..>>

Я все так и сделал и сказал Вам спасибо, а теперь выясняется, что надо было делать не так, но как я не пойму. Рисовать прямо на форме я не могу, т.к. обычно в научных программах бывает 2 или более рисунков и, следовательно, при событие Form1_Paint у меня будут перерисовываться все графики, а этого мне не надо. И потом я что-то не нашел как применить в VBNET для PictureBox и Form такой метод, как SetPixel, но если бы даже я его и нашел, то не понятно как его использовать, т.к. часть изображения, например, в PictureBox у меня должно оставаться неизменным и это я делаю загоняя нужный мне bmp в Picture1.Image, а потом дорисовываю этот bmp нужными мне точками, которые дают график изменения нужного мне параметра в развертке по времени или координате. Если же я буду использовать событие Picture1_ Paint, то вся уже выведенная до этого информация из рисунка пропадает и я вижу только движущуюся точку. Конкретно я изменил код в теле основной программы так

            'XG = x(i) / ML : YG = 280 - y(i) / ML
            'If i = 1 Then gg.FillRectangle(Brushes.Blue, XG, YG, 1, 1)
            'If i = 2 Then gg.FillRectangle(Brushes.BlueViolet, XG, YG, 1, 1)
            'If i = 3 Then gg.FillRectangle(Brushes.Bisque, XG, YG, 1, 1)
            'If i = 4 Then gg.FillRectangle(Brushes.Red, XG, YG, 1, 1)
32: Next i
        'Picture1.Image = bmp 'записываем новые данные на картинку bmp
        Picture1.Invalidate()
 
И теперь графика выводиться в событии Picture1_Paint

Private Sub Picture1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Picture1.Paint
        e.Graphics.DrawString(infoString, New Font("Arial", 12, FontStyle.Italic Or FontStyle.Bold), Brushes.Red, stringPosition)
        If T < 0.5 Then e.Graphics.DrawEllipse(New Pen(Color.Navy), 50, 50, 25, 25)
        For i = 1 To 4 ' сохраняем начальные координаты
            XG = x(i) / ML : YG = 280 - y(i) / ML
            If i = 1 And Check1.CheckState = 1 Then e.Graphics.DrawEllipse(New Pen(Color.Blue), XG, YG, 5, 5)
            If i = 2 And Check2.CheckState = 1 Then e.Graphics.DrawEllipse(New Pen(Color.BlueViolet), XG, YG, 5, 5)
            If i = 3 And Check3.CheckState = 1 Then e.Graphics.DrawEllipse(New Pen(Color.Bisque), XG, YG, 5, 5)
            If i = 4 And Check4.CheckState = 1 Then e.Graphics.DrawEllipse(New Pen(Color.Red), XG, YG, 5, 5)
32: Next i
    End Sub

Здесь у меня для примера как эллипс до времени T < 0.5 сек выводиться постоянное изображение (на самом деле надо рисовать координатную сетку), а потом это изображение пропадает и выведенные точки тоже все пропадают, кроме последней, но мне надо, чтобы сохранялось все изображение. Подскажите, как в свете Ваших последних рекомендаций это сделать.

Что касается остальных Ваших замечаний, то я их считаю спорными. Например, ваше замечание, что Код абсолютно нечитаем и плохо структурирован. Здесь, как говориться на вкус и цвет товарищей нет, и по этому у каждого свои представления о красоте кода. Тем более, что в программах для научных исследований, главным является ясное изложение именно математической части, а все остальное это просто бесплатное приложение к математической части и должно быть написано максимально просто (даже если при этом снизится скорость работы). А эти дурацкие лесенки я терпеть не могу, т.к. за ними не видно леса, т.е. математики. Да и основное назначение программ на разных языках программирования в статье показать не идеально вылизанный код, а дать представление людям, которые только знакомятся с разными языками программирования, представление по различиям в синтаксисе этих языков на примере решения одной и той же задачи.

А что касается Вашего замечания о том, что у меня Масса логических ошибок в проверках условий, то тут я вообще не понял о чем Вы. Если о том, что
вместо проверки CheckState логичнее было бы проверить булевое свойство Checked, то у меня так и сделано перед 36 меткой и на 37 метке, а так как в версии программы SpuskVBnetMV я в начале подпрограммы Param и после метки 37 заменил проверку состояния чекбоксов проверкой значения переменной kodCheck(i), которая тоже принимает значения 0 или 1, то и в программе SpuskVBnetM я оставил именно свойство CheckState, которое тоже принимает значение 0 или 1. Но если бы я этого и не делал, то не ужели это имеет какое то отношение к массе логических ошибок.

Совершенно не понимаю при чем здесь Ваше замечание, о том, что прямую и дугу окружности, когда я показываю направляющие, можно было нарисовать и более изощренно. Если только для того, чтобы показать какой я умный, то при нанесение координатной сетки я применяю метод Line, где он действительно оправдан, а при рисование направляющих я все равно почти все из них вынужден буду рисовать поточечно, т.к. количество математических функций (парабола, циклоида, синусоида и т.д.) гораздо больше тех кривых для которых имеются специальные методы рисования. По этому, чтобы не нарушать единообразия я нарисовал все направляющие поточечно. К тому же это никоим образом не отражается на скорости работы программы, т.к. рисование этих кривых выполняется очень редко и практически мгновенно по сравнению со временем работы программы.

А вот, что касается того, что На первом же тесте, программа упала с OverflowException (Arithmetic operation resulted in an overflow.), то не плохо было бы услышать Ваше мнение чем это могло быть вызвано, т.к. у меня такого ни разу не было (у меня стоит NET Framework v.1.0.3705 издания 2001 года). А, если у Вас есть и конкретные предложения, как можно увеличить скорость работы программы, то это тоже было бы очень интересно.

С наилучшими пожеланиями Сергей Юдин.

Ответить

Номер ответа: 62
Автор ответа:
 Сергей Юдин



Вопросов: 8
Ответов: 81
 Профиль | | #62 Добавлено: 09.01.07 20:10
Что касается предложенного Вами бенчмака, то он конечно же такой же бестолковый, как и тот, что использовал я
 


Он, по крайней мере, верный, и замеряет время исполнения одинакового кода с одинаковым количеством итераций.
 

Вы на что намекаете, что мой бенчмак не верный и в вариантах 2 и 3 имеет разный код в разных языках или выполняет разное количество итераций (даже при условии, что в нем специально подсчитывается число итераций и выводиться на экран вместе со временем работы бенчмака). Тогда укажите где конкретно Вы это увидели.

А ваша фраза <<Это - бенчмарк, а остальное - фуфло.>> это вообще кладезь мудрых мыслей и главное безотказный довод (знать бы еще к какому месту Вашего выступления его применить). По этому моя фраза о том, что эти бенчмаки оба бестолковые отражает реальное положение вещей и я сравниваю языки не по одинаковому коду программы в бенчмаке, а по разным кодам позволяющим решить одну и ту же задачу, а ваша фраза про ваш бенчмак это действительно - фуфло и полученные мною данные для него даже при 250 Mb свободной памяти не изменились.

С наилучшими пожеланиями Сергей Юдин.

Ответить

Номер ответа: 63
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #63 Добавлено: 09.01.07 20:27
КОРОЧЕ! Сергей, что-то вы на нудного человека смахиваете... :\ Вы сами сказали что не владеете ничем, по .нет конкретно ап стенку стукнули - отмазались... аналогично можно сделать по любому коду, который ва написали, смысл? Вы не программист, зачем оно вам? Капайтесь тем техонько в начуных своих работах, для разработок нанимайте программистов, платите им деньги, всё как положено... Охото самому программированием занятся - нет проблем, море информации в интернете, много людей на форумах... Статья - сплошное имхо, бенчмарк неверен. При поправке кода (переписывании заново) результат вполне очивиден... ну что ещё надо, догнать тему "эээээ.." ?

Ответить

Номер ответа: 64
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #64 Добавлено: 09.01.07 23:14
Спасибо, что хоть в этом не отказали убогому.
Начнем с того, что убогим Вас на этом форуме никто не считает, в противном случае даже разговаривать не стали. Более того, не смотря на все Ваши высказывания и глубокомысленные выводы относительно быстродействия (к моему удивлению) относятся более, чем терпимо! Но вернемся к основной теме..
Да мне собственно всего два момента и не понятны, а именно по Try...Catch...Finally и по предложению использовать метод SetPixel.

1. Это новый, рекомендуемый, способ перехвата и обработки ошибок. Суть его и синтаксис сводится к следующему:
        Try
            '// Участок кода в котором необходимо
            '// перехватить исключение. В случае
            '// возникновения такового исполнение переходит
            '// в блок Catch
        Catch ex As Exception
            '// Код выполняемый в случае ошибки
        Finally
            '// Код выполняемы в любом случае
            '// независимо от того была ошибка или нет
            '// Этот блок является НЕобязательным
        End Try

Это альтернатива Вашему
87:     MsgBox("Введите правильно данные", , "Spusk";) : Exit Sub
90:

2. Что касаемо метода SetPixel//
Public Sub SetPixel(ByVal x As Integer, ByVal y As Integer, ByVal color As System.Drawing.Color)
     Member of: System.Drawing.Bitmap
Summary:
Sets the color of the specified pixel in this System.Drawing.Bitmap.

Parameters:
y: The y-coordinate of the pixel to set.
color: A System.Drawing.Color structure that represents the color to assign to the specified pixel.
x: The x-coordinate of the pixel to set.

Return Values:
This method does not return a value.

Пример использования:
        CType(Picture1.Image, Bitmap).SetPixel(5, 5, Color.Red)
        '// или применительно к Вашему случаю
        bmp.SetPixel(5, 5, Color.Red)

Теперь что касается моего совета относительно вывода графики.. Я привел базовую реализацию, поскольку вы не вдававились в подробности реализации.. Кроме того,раз Вы проводите тест именно на БЫСТРОДЕЙСТВИЕ, то Вы должны понимать тот факт, что абсолютно любую задачу(в данном случае вывод графики) можно решить 3 и более способами. И вы, как человек, проводящий тесты просто ОБЯЗАНЫ были рассмотреть ВСЕ возможные варианты, и использовать наиболее быстрый применительно к Вашей ситуации.. А вы, вместо этого, довольствовалишь лишь тем,что подсказали вам, абсолютно не вдумываясь в суть этого действия...
Рисовать прямо на форме я не могу, т.к. обычно в научных программах бывает 2 или более рисунков
Мы рассматриваем конкретную программу, и конкретный пример.. в данном случае мы имеем 1 форму!!
Например, ваше замечание, что Код абсолютно нечитаем и плохо структурирован. Здесь, как говориться на вкус и цвет товарищей нет, и по этому у каждого свои представления о красоте кода.
Абсолютно согласен.. если Вас ЭТО устраивает, то мне в таком случае абсолютно фиолетово. Никто не собирается Вас ни в чем убеждать.. Вы просили высказать свое мнение? Вы его получили! Добавлю лишь то, что у меня на работе за такой код выгнали бы без разговора в течении 15 минут полсе получения исходников..
Тем более, что в программах для научных исследований, главным является ясное изложение именно математической части, а все остальное это просто бесплатное приложение к математической части и должно быть написано максимально просто (даже если при этом снизится скорость работы).
Меня абсолютно не волнует математическое представление Вашей модели, вы тестируете приложение на СКОРОСТЬ! И именно этим я руководствовался говоря свое мнение о коде,который при таком написание прочесть и разобраться практически не представляется возможным.. Вы должны были максимально структурировать код для удобочитаемости, чтобы всякий желающий мог в нем разобраться, и сделать свое заключение о справедливости ваших выводов относительно быстродействия, а не относительно красоты вашей математической модели!
Идем дальше...
А что касается Вашего замечания о том, что у меня Масса логических ошибок в проверках условий, то тут я вообще не понял о чем Вы.
Поясняю...
Для более детального рассмотрения берем участок кода
            If i = 1 Then gg.FillRectangle(Brushes.Blue, XG, YG, 1, 1)
            If i = 2 Then gg.FillRectangle(Brushes.BlueViolet, XG, YG, 1, 1)
            If i = 3 Then gg.FillRectangle(Brushes.Brown, XG, YG, 1, 1)
            If i = 4 Then gg.FillRectangle(Brushes.Red, XG, YG, 1, 1)

Что мы тут видим? Только то, что в зависимости от переменной I меняется цвет пиксела. В таком случае почему бы не сделать сделующее:
    '// Объявляем на уровне формы
    Private MyColors() As Color = {Color.Blue, Color.BlueViolet, Color.Brown, Color.Red}
    '// .........
    '// Далее в коде
    '// Все Ваши строчки меняем на одну единственную запись
        bmp.SetPixel(XG, YG, MyColors(i - 1))

Что мы получили??? Код стал
-более читабельным
-более логичным
-более быстрым
-более красивым если угодно
А что сделали Вы? Написали кучу никчемных проверок, плюс на каждой итерации цикла у вас происходи инициализации структуры Brushes! Вы же додумались сделать вычисление координат в 1 строке а не в каждой проверке, так почему же вы не сделали тоже самое и с остальным??? Теже замечания спараведилвы к следующим участкам кода:
            If i = 1 And CheckBox1.CheckState = CheckState.Unchecked Then GoTo 32
            If i = 2 And CheckBox2.CheckState = CheckState.Unchecked Then GoTo 32
            If i = 3 And CheckBox3.CheckState = CheckState.Unchecked Then GoTo 32
            If i = 4 And CheckBox4.CheckState = CheckState.Unchecked Then GoTo 32
'// ......
        If RadioButton2.Checked = True Then k = 2
        If RadioButton3.Checked = True Then k = 3
        If RadioButton4.Checked = True Then k = 4

В теле цикла 6 раз встречается запись вида / 2 / h ,так почему бы не вычислить это значение только 1 раз и потом просто использовать по необходимости?? Это только то,что бросилось в глаза при поверхностном ознакомлении с кодом. И подобые ляпсусы встречаются довольно часто. Именно это я и называю логическими ошибками..
Скажу честно.. описывать это творение дальше у меня нет никакого желания.
Удачи

Ответить

Номер ответа: 65
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #65
Добавлено: 10.01.07 02:11
Вы на что намекаете, что мой бенчмак не верный и в вариантах 2 и 3 имеет разный код в разных языках или выполняет разное количество итераций

Именно. В примере на C++ переменная L используется без инициализации. Поскольку переменные в C++, в отличие от Basic в начале работы содержат мусор, поведение этой программы непредсказуемо и уж тем более не может употребляться для бенчмарка.

знать бы еще к какому месту Вашего выступления его применить

Ко всем, в которых рассказывается, как правильно делать бенчмарки, чтобы получать верные результаты и делать верные выводы, а не иметь на выходе какое-либо случайное число.

я сравниваю языки не по одинаковому коду программы в бенчмаке, а по разным кодам позволяющим решить одну и ту же задачу

Вы хоть математику-то знаете? У математиков обычно все в порядке с логикой. Если сравниваются ЯЗЫКИ, то пишут одинаковый алгоритм и одинаковый (исключая синтаксис) код. А если пишется разный код, то это сравнение АЛГОРИТМОВ, но никак не языков. На Питоне на 286-й машине можно написать программу для вычисления детерминанта 50-го порядка методом Гаусса и она будет работать быстрее, чем программа для решения той же самой задачи на ассемблере, работающая на Коре Дуо - из этого, согласно вашей логике, следует сделать вывод, что 286-й быстрее Коре Дуо, а Питон быстрее ассемблера?

2HACKER: А эээээ повторить действительно маза :))

Ответить

Номер ответа: 66
Автор ответа:
 Сергей Юдин



Вопросов: 8
Ответов: 81
 Профиль | | #66 Добавлено: 10.01.07 10:54
ВСЕМ БОЛЬШОЕ СПАСИБО и особая благодарность EROS, т.к. у него было больше всего конструктивной критики. Я результатами этого шокового “эксперимента” доволен. Да и странно бы было, если бы эта статья вызвала у Вас другую реакцию. Во-первых она очень сырая, во-вторых написана очень резко, а в третьих я еще и допустил в ней несколько очень крупных ляпов, например, сделал Debug, а не Relase для бенчмака на VisualC++ да еще и ляпнул, что в языке С++ пропал оператор GOTO, хотя отлично знал, что в С он был (ну здесь меня подвела статья Крячко, по бенчмакам на бэйсиках). Кстати, то, что этот бенчмак мягко говоря не совершенен было ясно давно и, например, на форуме Мембраны вопрос по инициализации переменной L о чем пишет Sharp поднимался. Утверждалось даже, что компилятор С++ вообще выкидывал из кода обращение к подпрограмме на метке 140 и запись значения М, т.к. из него не производиться чтения, а, следовательно и весь этот цикл. При этом весь код превращается в шесть строк.

00401031 xor eax,eax
00401033 xor ecx,ecx
00401035 add eax,ecx
00401037 mov ecx,6
0040103C cmp eax,55D4A80h
00401041 jl 00401035

По этому я и сделал в вариантах 2 и 3 на всякий случай подпрограмму на метке 140 не пустой, а дальше ничего менять не стал, чтобы не подумали, что это я написал этот бенчмак. И привел я данные по этому бенчмаку только для того, чтобы показать, что использование таких простейших бенчмаков это бесперспективный путь при выборе языка программирования для научных работников для решения ими широкого круга задач. А в статье я выкину большую часть материала по этому бенчмаку, чтобы не отвлекал внимание от основной темы, а то большая часть критики была посвящена именно ему. Да и жалко, что, в основном все обсуждение свелось к пресловутому быстродействию языков программирования, хотя, как я писал, это не основной критерий при выборе языка программирования для научных работников. Но все таки критики было достаточно и мне есть над чем работать дальше. По этому свою статью пока снимаю.

С наилучшими пожеланиями Сергей Юдин.
 

Ответить

Номер ответа: 67
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #67 Добавлено: 12.01.07 02:14
Ну дык Сергей, бенчмарк он на то и бенчмарк, в нём именно скорости берётся за критерий (и/или память). В си в этом деле явно обгоняет конкурентов (при правельной реализации!) поэтому, зачем же теперь писать
жалко, что, в основном все обсуждение свелось к пресловутому быстродействию языков программирования, хотя, как я писал, это не основной критерий при выборе языка программирования для научных работников
Мы ведь именно скорости критиковали. Я в самом начале говорил... ЕСЛИ реализовать по человечески на разных языках - быстрее будет Си...

Ответить

Номер ответа: 68
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #68 Добавлено: 12.01.07 10:47
Ну, если не считать ассемблера :)
posts++

Ответить

Номер ответа: 69
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #69
Добавлено: 12.01.07 11:08
быстрее будет Си...

Низкоуровневые языки быстрей работают... если я не ошибаюсь.

Ответить

Номер ответа: 70
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #70
Добавлено: 12.01.07 17:30
LamerOnLine: давай посоревнуемся, у кого код будет быстрее для какой-нибудь большой задачи - у тебя на ассемблере или у меня на Си? :)

Ответить

Номер ответа: 71
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #71 Добавлено: 12.01.07 17:46
у кого код будет быстрее для какой-нибудь большой задачи - у тебя на ассемблере или у меня на Си?

Если не уравнивать время разработки - я не против. Sharp, не нужно повторять аффтара темы :)
Если ты имеешь ввиду действительно большую задачу - тут рулит комбайн. Критичные простые циклы - на асме, обвязку - на средствах С++. Это же не ВБ, никаких библов тут не надо :))
Низкоуровневые языки быстрей работают... если я не ошибаюсь.

Не ошибаешься, но при этом для серьезной задачи тебе придется оптимизировать код вручную, ибо "умного" компилятора тебе в помощь не будет. Посему добиться максимального быстродействия будет непросто. Если не владеешь знаниями языка, ньюансов системы и архитектуры машины.
Вот только бонус быстродействия навряд ли окупит излишний гемор при написании :))
ЗЫ Всех со Старым Новым Годом!!!

Ответить

Номер ответа: 72
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #72 Добавлено: 12.01.07 18:01
Низкоуровневые языки быстрей работают... если я не ошибаюсь.

"Низкоуровневой язык" - это сокращенное от "язык с низким уровнем скорости исполнения"

"Высокоуровневой язык" - соответственно "язык с высоким уровнем скорости исполнения"

А мужики то и не знают!

Ответить

Номер ответа: 73
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #73 Добавлено: 12.01.07 18:22
Ага. А еще уровень языка определяется через Experience, набираемый посредством убийства программистов :)
ЗЫ Post Up :)

Ответить

Номер ответа: 74
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #74
Добавлено: 12.01.07 20:15
LOL: Т.е. ты полагаешь, что оптимизируешь код лучше, чем VC++ 2005? Ну тогда я не буду с тобой спорить :)

Ответить

Номер ответа: 75
Автор ответа:
 Сергей Юдин



Вопросов: 8
Ответов: 81
 Профиль | | #75 Добавлено: 12.01.07 22:13
Мы ведь именно скорости критиковали. Я в самом начале говорил... ЕСЛИ реализовать по человечески на разных языках - быстрее будет Си...


Да я и сам придерживаюсь этого мнения, что вообще-то на С++ теоретически должно быть быстрее, но во-первых на сколько быстрее, а во-вторых, пока я этого не увижу, программа SpuskVB6MdllFB в моем обзоре будет на некоторых режимах самой быстрой. И в-третьих, я уже привык, что то, что кажется очевидным, не всегда оказывается таковым после экспериментальной проверки. Например, EROS, является очень квалифицированным программистом и он мне очень помог при написание программы SpuskVBnet, поэтому, наверное, уверенный в своих рекомендациях, и не стал их проверять на практике. Так он предложил заменить метод вывода точек на график и вместо gg.FillRectangle использовать bmp.SetPixel, что является вполне логичным, т.к. нарисовать один пиксель вместо квадрата со стороной в один пиксель гораздо проще, но такая замена (при самом чувствительном к такой замене режиме работы NC0=10, kodG=1, kodT=0) на практике привела к тому, что время работы программы SpuskVBnetM не только не уменьшилось, а наоборот увеличилось на 16 (шестнадцать) процентов.

При этом Ваше беглое знакомство с проблемой никак не позволяет Вам делать вывод, что моя статья не имеет никакой научной и практической ценности. Например, EROS тоже бегло ознакомился только с кодом первой программы SpuskVBnet, и на основание этого раскритиковал все мои программы и предложил несколько методов по улучшению кода, которые были мною уже реализованы в выложенных улучшенных версиях программы SpuskVBnetM и SpuskVBnetMV, что следует не только из кода этих программ, но и непосредственно из текста статьи. Конкретно это касается выноса кода по определению переменной k из критичного кода и по замене 4-х строк критичного кода в условии перехода на метку 32 одной строчкой. Он также предложил заменить 4-е строки критичного кода по выводу точек на график одной, что не возможно без организации дополнительного цикла, где эта строка будет выполняться те же 4-е раза, в улучшенных версиях программы SpuskVBnetM и SpuskVBnetMV, где эта операция вынесена из критичного кода. А предложение по замене /2/h мало того, что не дает никакого статистически значимого результата, так вообще не имеет отношения к теме статьи, где нас интересует только соотношение скоростей, а т.к. это выражение использовано в программах на всех языках, то это соотношение измениться не может. По этому за критику конечно же спасибо, но все таки я ожидал более глубокого анализа. Да и вообще, я ведь просил написать рецензию по статье, а не конкретно по быстродействию языков. И если даже окажется, что программа, написанная на VisualC++, будет работать в 2 раза быстрее, чем SpuskVB6MdllFB, то это никак не сможет повлиять на выводы сделанные в статье.

С наилучшими пожеланиями Сергей Юдин.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам