Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Обработка в реальном времени Добавлено: 13.04.09 20:31  

Автор вопроса:  aleha
Вопрос в принципе абстрактный, но из-за этого не менее актуальный для меня.
Мне необходимо в реальном времени обрабатывать массив с данными размерностью от нескольких тысяч до нескольких десятков тысяч. Как вы думаете на современной машине сможет ли программа пробегать по такому массиву с данными раза 2-3 за секунду? Или может быть есть какие-то более хитрые алгоритмы обработки больших объемов или специальные методы. Опять же повторюсь, пока что конкретики нету никакой, но точно уверен, что работы с этим объемом данных и БД не планируется. Может быть кто-то работал с такими задачами и поделится опытом.
Заранее спасибо.

Ответить

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

Номер ответа: 1
Автор ответа:
 VβÐ



Вопросов: 15
Ответов: 194
 Web-сайт: www.homacosoft.com
 Профиль | | #1
Добавлено: 13.04.09 20:32
Смотря что ты с этим массивом делаешь - трассифировку с поддержкой каустики или просто обходишь :)

Ответить

Номер ответа: 2
Автор ответа:
 aleha



Вопросов: 8
Ответов: 19
 Профиль | | #2 Добавлено: 13.04.09 20:44
обхожу по очереди каждый элемент, произвожу какие-то изменения в значениях этого элемента и так по кругу....

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 14.04.09 00:48
от нескольких тысяч до нескольких десятков тысяч. Как вы думаете на современной машине сможет ли программа пробегать по такому массиву с данными раза 2-3 за секунду?

Жесть.

Ответить

Номер ответа: 4
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #4 Добавлено: 14.04.09 03:21
обхожу по очереди каждый элемент, произвожу какие-то изменения в значениях этого элемента и так по кругу....
Тогда лучше использовать Generic.List(Of T).В нём уже реализованы функции поиска, замены и т.д.
Как вы думаете на современной машине сможет ли программа пробегать по такому массиву с данными раза 2-3 за секунду?
Врядли ты добъёшься такой скорости. На скорость будет полностью зависеть от "кривизны твоих рук".

Ответить

Номер ответа: 5
Автор ответа:
 VβÐ



Вопросов: 15
Ответов: 194
 Web-сайт: www.homacosoft.com
 Профиль | | #5
Добавлено: 14.04.09 06:10
  1.  
  2. Dim i As Long
  3. Dim b(100000) As Long
  4. Dim t As Single
  5. Dim n As Long
  6. t = Timer
  7. Do Until Abs(Timer - t) > 1
  8. For i = 0 To 100000
  9. b(i) = Rnd * 1000
  10. Next i
  11. n = n + 1
  12. Loop
  13. MsgBox n


  1.  
  2. Dim i As Long
  3. Dim b(100000) As String
  4. Dim t As Single
  5. Dim n As Long
  6. t = Timer
  7. Do Until Abs(Timer - t) > 1
  8. For i = 0 To 100000
  9. b(i) = b(i) & " "
  10. Next i
  11. n = n + 1
  12. Loop
  13. MsgBox n


Стотысячный массив чисел обходится 149 раз в секунду, строковой - 40 (учти, оператор & жрет много, лучше использовать вместо него Mid$). При этом я параллельно запустил рендеринг. Я думаю, на современной машине можно, и
скорость будет полностью зависеть от "кривизны твоих рук".


P.S. Тестировал на Core2Quad, задействовал одно ядро.

Ответить

Номер ответа: 6
Автор ответа:
 aleha



Вопросов: 8
Ответов: 19
 Профиль | | #6 Добавлено: 14.04.09 19:37
во, это уже дело интересное, надо бы теперь последовательно выяснить какие операторы и функции кушают меньше процессорного времени.

Ответить

Номер ответа: 7
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #7
Добавлено: 15.04.09 22:08
Уже давно всё выяснено, погугли, найдешь.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 15.04.09 23:24
Познакомься с языком ассемблера. Сложение двух чисел в регистрах, например, осуществляется за один такт, т.к. порядка 2 миллиарда раз в секунду.

Ответить

Номер ответа: 9
Автор ответа:
 aleha



Вопросов: 8
Ответов: 19
 Профиль | | #9 Добавлено: 16.04.09 18:27
с ассемблером знаком, но к сожалению не умею писать приложения состоящие из кусочков, которые соответственно написаны на разных языках))
а на счет гуглить, то я и так постоянно гуглю. Просто чётких задач для гугления ещё нету, вот и собираю информацию предварительно.

Ответить

Номер ответа: 10
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #10
Добавлено: 19.04.09 16:42
Если хорошо оптимизируешь, то будет нормально и на VB. Смотри сам, что будет эффективнее - учить ассемблер или оптимизировать прогу.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 20.04.09 01:02
вбд пишет:
Если хорошо оптимизируешь, то будет нормально и на VB

На VB6 нормально ты ничего не наоптимизируешь

Под .NET код предложенный вбд выполняется 390 раз за секунду на Core 2 Duo (правда я уж параллельно не запускал рендеринг с трасировкой каустики и рассчетом физики Вселенной). Т.е. примерно в 2,7 раз быстрее. К тому же при желании можно будет распараллелить с помощью ParallelFx что даст еще до двухкратного увеличения скорости если все правильно сделать.

  1.         Dim Random As New Random
  2.         Const SIZE As Integer = 100000
  3.         Dim Data(SIZE - 1) As Integer
  4.  
  5.         Dim Start = Now
  6.         Dim Steps = 0
  7.         Do While Now.Subtract(start).TotalSeconds < 1
  8.             For i = 0 To SIZE - 1
  9.                 Data(i) = Random.Next(1000)
  10.             Next
  11.             Steps += 1
  12.         Loop
  13.         Console.WriteLine(Steps)
  14.         Console.ReadLine()


2 aleha
Насчет оптимизации, вряд ли ты сможешь существенно оптимизировать код, перейдя от .NET к ассеблеру (безусловно, сможешь оптимизировать на несколько процентов, но в разы - вряд ли).

BG(Алексей), использование List я думаю тут мало чем может помочь

Ответить

Номер ответа: 12
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #12 Добавлено: 21.04.09 03:06
BG(Алексей), использование List я думаю тут мало чем может помочь
Я слежу за топиком. И жду, когда дело дойдет до измениний значений массива с условиями проверки, поиска и т.д. Вот потом и посмотрим.
Т.е., я не говорю, что Generic.List(Of T), будет быстрее(но очень близок 100%). Но компактней и более читаемый код это точно.

Ответить

Номер ответа: 13
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #13 Добавлено: 21.04.09 03:08
Вместо смайлика стоит знак процента и закрывающая скобка.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #14 Добавлено: 21.04.09 03:30
BG(Алексей), List теоритически не может быть быстрее массива ни на каких операциях.

Функции поиска которые в нем используются, основаны на делегатах, это даст снижение производительности.

Ответить

Номер ответа: 15
Автор ответа:
 aleha



Вопросов: 8
Ответов: 19
 Профиль | | #15 Добавлено: 21.04.09 21:12
Условия и вычисления обязательно будут присутствовать, конечно надо будет их как-то оптимизировать (может быть сделать таблицу предварительно готовых значений), но от условий не избавиться ни как и думаю в таком случае производительность упадёт очень сильно.

Ответить

Страница: 1 | 2 |

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



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