Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Офф-топ

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

 

  Вопрос: .NET vs Basic 6 Добавлено: 22.08.04 17:53  

Автор вопроса:  Sparxx | Web-сайт: www.putin.ru

Ответить

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

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #76 Добавлено: 23.08.04 12:07
C> И сам ехе-файл на мыло высылаю, окошек там нет, только MsgBox по
C> окончании счёта.

Млин, ну ты хотя бы указал в письме ник свой, а то я долго думал,
ахпускать или не запускать... Потом мыло выяснил чье, решился
запустить:)))

Итак, вот собственно мой код, если сомневаешься, можешь перекомпилить,
если, конечно, есть на чем:

Module Module1
Sub Main()
Dim StartTime As DateTime = DateTime.Now
Dim EndTime As DateTime

Console.WriteLine("Подождите, идет выполнение цикла на 20 000 000 000...")
LongProc()
EndTime = DateTime.Now
Console.WriteLine("Время выполнения цикла:")
Console.WriteLine(EndTime.Subtract(StartTime).ToString)
Console.WriteLine("Нажмите любую клавишу...")
Console.Read()
End Sub

Public Sub LongProc()
Dim i As Long
For i = 0 To 20000000000
Next
End Sub
End Module

Цикл я вынел в LongProc, чтоб боще было выдрать дизассемблерный код
самого цикла.

Вот собственно конкретный дизассемблерный код процедуры LongProc:

00000000 push ebp
00000001 mov ebp,esp
00000003 sub esp,8
00000006 push edi
00000007 push esi
00000008 xor esi,esi
0000000a xor edi,edi
0000000c xor esi,esi
0000000e xor edi,edi
00000010 mov eax,esi
00000012 mov edx,edi
00000014 add eax,1
00000017 adc edx,0
0000001a jno 00000023
0000001c xor ecx,ecx
0000001e call 784AA854
00000023 mov esi,eax
00000025 mov edi,edx
00000027 cmp edi,4
0000002a jg 00000036
0000002c jl 00000010
0000002e cmp esi,0A817C800h
00000034 jbe 00000010
00000036 nop
00000037 pop esi
00000038 pop edi
00000039 mov esp,ebp
0000003b pop ebp
0000003c ret

Строки 1c и 1e, как видишь, вообще не выполняются, и из твоих расчетов
прийдется отнять 31 такт... Я могу ошибаться, но это, как я понял,
обработчик ошибки переполнения.

Кстати, как видишь в моем случае исходный код получается на порядок
проще, чем в твоем. Да и писал я его меньше чем за минуту, на
задумываясь иб оптимизации и обо всем остальном. Больше времени
понадобилось, что понять, как выдрать из всего этого ассемблерный код.

Специально пересчитал такты в твоем и моем случаюх: 81 моих тактов
против 39 твоих. Можно, конечно, сделать кое-какие выводы о скорости,
разделив 1-е число на 2-е. Хотя, неплохо бы и запустить программку.

Duron 800, 128 MB, Win XP Pro, .NET Framework 1.1. В фоне работает
пара программ типа почтового клиента, файрвола.

Программа Артема на .NET: в среднем 1:20
Программа cresta на ассемблере: в среднем 50 с
Программу CyRax не принимала участие в тестировании - не та весовая
категория:)))

Как видишь, управляемая .NET-программа, для запуска которой нужно 20
метров в виде .NET Framework, которая в памяти кушает ни много, ни
мало, 5 мб (я сделал Console Application), которая выполняется под
управлением CLR и написана дааалеко не специалистом по оптимизации
кода оказалась всего в 1.6 раз медленнее программы, написанной на
идеальном и самом быстром языке программирования - Ассемблере...

Причем это - выполнение бездумного цикла, размер которого скорее всего
окажется ненужным для реальной программы. Хотелось бы увидеть
результаты тестов, отражающих выполнение более реальных задач...
Но я уже пас. Хватит с меня одной бессонной ночи, всего 3.5 часов
поспал, и опять разбираться:)))

C> Слушай, пришли ка мне полный дизассемблированный листинг на
C> cyrax@hotmail.ru

Извини, весь листинг не могу. Просто не знаю, как его получить. В VSN
дебаггер позволяет увидеть листинг определенной процедуры, но не весь
сразу, хотя, может, я что-то не так делаю. Короче, все, что получилось
выдрать, кидаю тебе и Cresta.

Ответить

Номер ответа: 77
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #77 Добавлено: 23.08.04 13:01
Sparxx

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

Артём, кусок кода 1c и 1e - это обработка возможного переполнения. перед ними стоит jno - условный переход <если нет переполнения>. Видимо страховка от получения неверного результата в случае, если edx зашкалит (при этом edx поменяет знак, и возможно прога зациклится).
ИМХО, насчёт того что твой код проще - это ты зря ;-) В твоём цикле 14 строк, в моём - 6 строк. Что проще? Остальное, что ты видел в листинге - это счётчик времени, перевод этого счетчика в вид ASCII-строки и вызов MessageBox'а. Это ВСЯ программа. В отличие от твоей одной процедуры. От начала и до конца. Даже если взять всю прогу, то 3кБ - думаю для .NET-приложения - готового, недостижимый результат.

Если касаться того, что непустой цикл на assembler'e окажется медленнее - наоборот, разрыв будет ещё больше. Причем в разы. Хотя бы за счёт того, что помимо твоего желания будут подобные обработчики ошибок, которые если даже и не вызываются, косвенно увеличивают время работы программы за счёт увеличения занимаемого объёма памяти. Хотя бы за счёт того, что оптимизировать код я могу так как мне захочется, а вот ты не сможешь, нет у тебя доступа на такой уровень. Как выдаст компилятор - так и будешь иметь.
  Что касается C - программ, из небольшого опыта могу сказать, что работает практически так же быстро, как и ассемблерный. Касательно Делфи - ничего сказать не могу. Просто знаю, что тоже достаточно не медленный.
   Хотя идея достаточно интересная - сделать не пустой цикл, а выполнить какое-нибудь вычисление или другое осмысленное действие. Жалко, из меня алгоритмист никудышний, хотя попробовать можно.

Ответить

Номер ответа: 78
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #78
Добавлено: 23.08.04 13:07
Artyom писал:
Нет, не затих. По третьему разу перебирал ответ на эти посты, чтоб
никого своими словами не обидеть, а то мало ли что...[/i]

RESPECT, всегда надо подумать прежде чем что-то скать...

Потрудитесь указать, кем и где были составлены эти шаблоны, пержде чем
обвинять кого-то в наглом цитировании.
Я так понял, в этом случае вразумительного ответа я не получу?


Попросту все "за" и "против" уже ни для кого не секрет и повторяются тут не единажды...
И многое из того что ты тут отписал, уже встречалось ранее ;) Как, впрочем, и то что отписали мы...

Для тех, кто еще никогда не видел Visual Studio .NET:

Боюсь что я, за других утверждать не беоусь, видел и студию и все что там есть... дебаггер я бы не скзал что уж оччень такой удобный...

Теперь, плз, мне на artyom@soobcha.org программу с пустым циклом на
20000000000 (20 миллиардов)на PB, C, ассемблере или вообще на чем бы
то ни было, если я увижу, что ваша программа выполняется быстрее, то
все вопросы отпадают. Я признаю свою ошибку.


Зря ты про ассемблер вспомнил, он всегда и везде выполнялся и выполняется шустрей - не бывает...

кстати, пустой цикл Do ... Loop в ассемблере: JMP $ + 1
Ну как, что быстрее !? ;)

PS А вообще имхо разговор весь этот бесполезен

Это было ясно с самого начала, см. мой первый пост в этой теме ;)

ибо некоторые даже не
удосуживаются хотя бы внятно прочитать что написано и делать на основе
этого неверные выводы... Ничего личного...


А вот это ты зря, все внимательно читают все твои замечания дабы найти в них слабо место и придраться ;)

CyRax писал:
Я бы не рискнул при полном отсутствии знаний бросаться на такого монстра как я :)[I/]

Я бы себя не переоценивал и не недооценивал бы других, т.к. я знаю массу народа кто не так уж и глуп ;))

Ответить

Номер ответа: 79
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #79 Добавлено: 23.08.04 13:18
Посмотрел листинг - там только Sub Main и Long proc. Если туда ещё вставить счетчик времени, перевод счетчика в строковое представление и вывод результатов счёта в MessageBox - увидишь, чей код проще :) А так 5,5 кБ на Sub Main, пустую и Процедуру цикла - многовато.
   Ну да ладно, в общем если есть желание попробовать ещё, то всегда пожалуйста.
   А вообще-то правильно, что до конца не сдаёшься. Я сам упрямый до безобразия :-)

Ответить

Номер ответа: 80
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #80
Добавлено: 23.08.04 13:26
Павел писал:
Артем, не парься, они непробиваемые и ничего в .Net не понимают и
понимать не собираются :)


Не обзывайся :))

CyRax писал:
Кстати, а кто знает что лучше использовать для 20 млрд: 1 цикл через сопроцессор или 5 циклов по 4 млрд через обычные регистры?

Надо будет попробовать... вот только время найти бы где :(

Павел писал:
Ну вот, ешкин кот! ПРосил же закрыть тему сразу... А развязали черт
знает что. Придется и мне что-нть ответить...


Давай, присоединяйся к нашему сообществу флэймеров :))

2sne: про формат .Net-сборок... Пока ты не изучишь его под микроскопом
(о чем я тебя, кстати, просил :), твои слова бездоказательны.


Ох подожди, вот сдам философию, возьмут меня на работу, буду свободный как птиц :) Тогда мои слова не будут пустым звуком :))

Наверное,
людей пугает размер .Net Fw.


Вот выйдет Лонгхорн, там и посмотрим, что и кого пугает ;) А вообще готовьтесь к потоку сообщений, типа: моя прога не работает под 95, 98, 98SE, Me, NT, 2k, XP почему !? И как только чел. получит ответ, он будет удивлен и раздасадован до самой глубины души :))

IL-код компилируется только один раз - при первом запуске программы.
Если тебя это не устраивает, то можно сразу пройтись утилитой, которая
скомпилирует IL код. Тогда при первом запуске программы JIT-компиляция
проходить не будет, но и о мультисистемности можно забыть.


И куда-же этот откомпилированный код девается !? Хранится на винчестере !? Тогда смысл этого кода, у тебя получается две совершенно одинаковые программы... Ну ка в этом месте поподробней, я не понял :( объясни, плз...

Давай я пришлю тебе пару тестовых прог, ты их обследуешь и выложишь
хорошо документированные результаты. Вот тогда поговорим...


Подожди до сентября месяца :) (Если не сдам, то до октября)

За пару дней 72 сообщения нафлудили :))))

Мы старались :))

cresta писал:
А что было бы если Sharp тут оказался, представляешь?

Боюсь тогда бы столь длинного спора не возникло :)) Хотя, возможно, что сейчас бы этот топик побил бы предыдущий :))

Sparxx писал:
2павел - рубай тему, никто помогать так и не собрался, все тока останутся при своих после 15ти страниц обсуждений...

Это былоя ясно с самого начала... Выбор твой, мы его уже сделали, но учит что в последствии тебе все-равно прийдется ознакомиться и с .НЕТ, а бэйсик сможешь и пропустить... Если тебе не терпится на новенькую платформу перейти... Но, имхо, начинать надо с чего-то более простого и примитивного... Заметь все кто сейчас активно продвигают .НЕТ, программили раньше на шестом...

После всех этих топиков - ничкто не сменил мнения. Че толку тогда?

Просто поспорить :)) Просто последнее время на форуме затишье, и даже как-то скучно :))

Ответить

Номер ответа: 81
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #81
Добавлено: 23.08.04 13:36
Artyom писал:
Кстати, как видишь в моем случае исходный код получается на порядок
проще, чем в твоем. Да и писал я его меньше чем за минуту, на
задумываясь иб оптимизации и обо всем остальном. Больше времени
понадобилось, что понять, как выдрать из всего этого ассемблерный код.


Ну ты же попросту решил сравнить код с ассемблером... чистый цикл там тоже не долго пишется... интерфейс дольше :)

оказалась всего в 1.6 раз медленнее программы, написанной на
идеальном и самом быстром языке программирования - Ассемблере...


Ты не думай, ассемблерная сортировка и сортировка на медленном VB идет как 1:4, та же сортировка но на всеми нелюбимом Дельфи и неплохом PowerBasice, оказалась как: 2:3...

Так что я бы не сказал что это быстро...

cresta писал:
Касательно Делфи - ничего сказать не могу

В Дельфи код несколько хуже чем в VC, но тоже не плох, и выполняется не на много медленный кода сюшника...

Ответить

Номер ответа: 82
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #82
Добавлено: 23.08.04 14:50
2 Артем: ту в Release компилировал прогу?

Ответить

Номер ответа: 83
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #83
Добавлено: 23.08.04 14:51
2 Sparxx: я сразу предупреждал, что хорошим твой вопрос не кончится :)
Зато это теперь вторая по объему тема на форуме! Возможно еще и на
первое место после обсуждения кинофильмов выйдет :)

Ответить

Номер ответа: 84
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #84
Добавлено: 23.08.04 14:56
PS to 81

Ты не думай, ассемблерная сортировка и сортировка на медленном VB идет как 1:4, та же сортировка но на всеми нелюбимом Дельфи и неплохом PowerBasice, оказалась как: 2:3...

Совсем забыл сказать, почему такие маленькие приимущества... Да все из-за стека, т.к. скорость работы со стеком одна :) Т.е. сам ассемблерный код, в силу своей чистоты, выполняется много и много быстрее, но со стеком работа все-равно занимает и там и сям одинаковое ко-во времени, это самое медленное действие... Т.е. все приимущество идет только на выигрывании тех самых тактов... А работа со стеком возможный отрыв уменьшает...

Ответить

Номер ответа: 85
Автор ответа:
 Kodo



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

ICQ: 293048085 

Вопросов: 37
Ответов: 457
 Профиль | | #85 Добавлено: 23.08.04 15:18
>Зато это теперь вторая по объему тема на форуме!

А первую ссылочку мона? Не видел вроде, посмотреть охота!

Ответить

Номер ответа: 86
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #86
Добавлено: 23.08.04 15:28
http://vbnet.ru/forum/show.aspx?id=48094

Ответить

Номер ответа: 87
Автор ответа:
 Андрей Никитин



ICQ: 325172082 

Вопросов: 3
Ответов: 81
 Профиль | | #87 Добавлено: 23.08.04 15:55
2 Sparxx:
Не мучайся с категоричным решением и не давай себя мучать другим: умеешь программить на VB6 - программируй (на данный момент VB6 самый удобный - IMHO).
Не проси других заставить тебя перейти на другой язык/платформу: интересен тебе .NET - изучай (хотя бы для расширения знаний) - по мере изучения сам решишь стоит он твоего внимания или нет; неинтересен - не изучай, все равно тогда ничего не добьешся (кроме головной боли).
IMHO: за .NET будущее (весь вопрос насколько скорое) - это однозначно. MS никогда еще не упускала своего... И к этому будущему надо быть готовым... :)
А вообще, если б на форуме был он-лайн шутер думаю получилась бы командная игра - что-то типа Толпа против Артема. Но это не есть истина... Во как... :)

Ответить

Номер ответа: 88
Автор ответа:
 Андрей Никитин



ICQ: 325172082 

Вопросов: 3
Ответов: 81
 Профиль | | #88 Добавлено: 23.08.04 15:56
PS. Sorry за офф-топ.

2 Павел: Похоже тему и правда пора прикрывать, а то люди еще начнут ножи точить :)

Ответить

Номер ответа: 89
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #89
Добавлено: 23.08.04 16:08
Андрей Никитин писал:
А вообще, если б на форуме был он-лайн шутер думаю получилась бы командная игра - что-то типа Толпа против Артема. Но это не есть истина... Во как... :)

Ты не прав, это первоначально я отбивался :) А потом все сравнялось, трое на трое :)

Павел, Artyom, WAX vs cresta, CyRax, и ваш покорный слуга :)
Т.ч. никакой толпы :))

2 Павел: Похоже тему и правда пора прикрывать, а то люди еще начнут ножи точить :)

Нет, вы что, тему закрывать не стоит :) Единственное что ее бы в Офф-топ перенести следовало-бы... имхо :)

Ответить

Номер ответа: 90
Автор ответа:
 Kodo



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

ICQ: 293048085 

Вопросов: 37
Ответов: 457
 Профиль | | #90 Добавлено: 23.08.04 16:13
Мнда... Написать что-ли и мне что-нить...

>на данный момент VB6 самый удобный - IMHO
Это по сравнению с VB.NET? Не знаю, не знаю. Но он явно проще - это точно!

>за .NET будущее (весь вопрос насколько скорое) - это однозначно. MS никогда еще не упускала своего... И к этому будущему надо быть готовым... :)
Мнда... Если МС захочет то будующем станет что угодно... Только вот мне кажется МС своим продвижением .NET теряет авторитет у многих программеров, которые на эту НЕТ переходить не собираются. ИМХО.

>оказалась всего в 1.6 раз медленнее программы, написанной на
идеальном и самом быстром языке программирования - Ассемблере...

Всего лишь... В 1.6 раз... Иногда (и очень часто, ИМХО) эти самые 1.6 раз как раз и решают все.

>PS. Sorry за офф-топ.
ИМХО, тут уже такой оффтоп развели, так что извинятся смысла не имеет.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

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



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