Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: AgentFire- обратись к дортору неадекват Добавлено: 05.02.11 21:25  

Автор вопроса:  udn79

Ответить

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

Номер ответа: 31
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #31
Добавлено: 06.02.11 16:07
в vb.net можно же сравнивать строки с помощью == ? Есть ли разница с String.CompareTo?

Ответить

Номер ответа: 32
Автор ответа:
 udn79



Вопросов: 2
Ответов: 95
 Профиль | | #32 Добавлено: 06.02.11 16:19
Ну так и используй
string a = "a";
a.CompareTo("";);
a.CompareTo(String.Empty);

Зачем мне показывать, ккк компилятор отсекает мусор, чтобы не сравнивать 0=0, 1000 раз, или чему там у тебя равен ARRAY_SIZE

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #33 Добавлено: 06.02.11 16:25
Winand пишет:
в vb.net можно же сравнивать строки с помощью == ? Есть ли разница с String.CompareTo?

Можно. ТОлько там не == а =. Но по-моему результат не всегд будет такой же как в случае со String.CompareTo, потому что, насколько я помню, там до сих пор остались директивы Option Compare, и в зависимости от них сравнение будет идти с учетом регистра или без. CompareTo будет с учетом регистра всегда.

Если посмотришь рефлектором, увидишь что в VB сравнение строк (да и не только их) выполняется через helper-метод в Microsoft.VisualBasic.

Ответить

Номер ответа: 34
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #34
Добавлено: 06.02.11 16:29
Winand, не сравнивай строки с помошью "==" - чесно скажу, .NET - хз, но в Java будут сравниваться указатели на объекты строк если ты юзаешь "==" и даже если строки "равны", "==" (DUH!) вернёт False.

.compareTo хорош если ты упорядочиваешь пузырьком (лол!) - так как возврощается целое число которое = 0 если объекты "равны" - работает не только для строк, кстати, положительное или отрицаетльное в зависимости если первый объект "больше" или "меньше" второго (понятно почему в кавычках?)

чтоб росто сравнить, юзай .equals (или .eqaualsTo, не помню)

Ответить

Номер ответа: 35
Автор ответа:
 udn79



Вопросов: 2
Ответов: 95
 Профиль | | #35 Добавлено: 06.02.11 16:31
странно, у меня работает на шарпе
if (string.Empty == null)

Ответить

Номер ответа: 36
Автор ответа:
 udn79



Вопросов: 2
Ответов: 95
 Профиль | | #36 Добавлено: 06.02.11 16:32
Говорят CompareTo быстрей работает,чем equals не проверял

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #37 Добавлено: 06.02.11 16:32
  1.         static void Main(string[] args)
  2.         {
  3.             const int ITERATIONS_COUNT = 10;
  4.             const int STEPS_COUNT = 10000000;
  5.  
  6.             Console.WriteLine(@"""""");
  7.             DateTime firstStart = DateTime.Now;
  8.             for (int i = 0; i < ITERATIONS_COUNT; i++)
  9.             {
  10.                 DateTime start = DateTime.Now;
  11.  
  12.                 for (int j = 0; j < STEPS_COUNT; j++)
  13.                 {
  14.                     string a = "a";
  15.                     a.CompareTo("");
  16.                 }
  17.  
  18.                 Console.WriteLine("{0}: {1}", i, DateTime.Now.Subtract(start));
  19.             }
  20.             Console.WriteLine("Avg: {0}", new TimeSpan(DateTime.Now.Subtract(firstStart).Ticks / ITERATIONS_COUNT));
  21.  
  22.             Console.WriteLine(@"String.Empty");
  23.             firstStart = DateTime.Now;
  24.             for (int i = 0; i < ITERATIONS_COUNT; i++)
  25.             {
  26.                 DateTime start = DateTime.Now;
  27.  
  28.                 for (int j = 0; j < STEPS_COUNT; j++)
  29.                 {
  30.                     string a = "a";
  31.                     a.CompareTo(String.Empty);
  32.                 }
  33.  
  34.                 Console.WriteLine("{0}: {1}", i, DateTime.Now.Subtract(start));
  35.             }
  36.             Console.WriteLine("Avg: {0}", new TimeSpan(DateTime.Now.Subtract(firstStart).Ticks / ITERATIONS_COUNT));
  37.  
  38.             Console.ReadLine();
  39.         }


Вот, пожалуйста.

Результаты
  1. ""
  2. 0: 00:00:01.3570776
  3. 1: 00:00:01.3670782
  4. 2: 00:00:01.3630780
  5. 3: 00:00:01.3550775
  6. 4: 00:00:01.3620779
  7. 5: 00:00:01.3560776
  8. 6: 00:00:01.3440769
  9. 7: 00:00:01.3670782
  10. 8: 00:00:01.3440769
  11. 9: 00:00:01.3280760
  12. Avg: 00:00:01.3548774
  13. String.Empty
  14. 0: 00:00:01.3500772
  15. 1: 00:00:01.3580777
  16. 2: 00:00:01.3270759
  17. 3: 00:00:01.3650781
  18. 4: 00:00:01.5280874
  19. 5: 00:00:01.3370765
  20. 6: 00:00:01.3820790
  21. 7: 00:00:01.3320762
  22. 8: 00:00:01.3320762
  23. 9: 00:00:01.3670782
  24. Avg: 00:00:01.3679782

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #38 Добавлено: 06.02.11 16:36
Зачем мне показывать, ккк компилятор отсекает мусор, чтобы не сравнивать 0=0, 1000 раз, или чему там у тебя равен ARRAY_SIZE

Например, чтоб убедиться что он ничего на самом деле не отсекает, а на самом деле там реально выполняется куча операций сравнения. В чем можно убедившись просто увеличив кол-во элементов или добавив туда немного мусора, что приведет к увеличению времени работы (надеюсь, не нужно объяснять почему)

Ответить

Номер ответа: 39
Автор ответа:
 udn79



Вопросов: 2
Ответов: 95
 Профиль | | #39 Добавлено: 06.02.11 16:36
пузырек давно. уже никто не использует, тормозной алгоритм.

Ответить

Номер ответа: 40
Автор ответа:
 udn79



Вопросов: 2
Ответов: 95
 Профиль | | #40 Добавлено: 06.02.11 16:39
Ты про общее время(что из замера можно было исключить) или время выполнение самого цикла без инициализации массава?

Ответить

Номер ответа: 41
Автор ответа:
 udn79



Вопросов: 2
Ответов: 95
 Профиль | | #41 Добавлено: 06.02.11 16:41
Спасибо
что хоть код нормальный без ошибок стал выкладывать
http://vbnet.ru/forum/show.aspx?id=213868&tolastpage=true#37

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #42 Добавлено: 06.02.11 16:42
Смотри по коду какое вермя там считается

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #43 Добавлено: 06.02.11 16:44
Первый раз код пришлось выкладывать несколько раз потому что сначала считался за тег форматирования курсивом, затем в коде появились смайлики.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #44 Добавлено: 06.02.11 16:48
Morpheus пишет:
Winand, не сравнивай строки с помошью "==" - чесно скажу, .NET - хз, но в Java будут сравниваться указатели на объекты строк если ты юзаешь "==" и даже если строки "равны", "==" (DUH!) вернёт False.

В дотнете этого нет. Оператор == в классе String переопределен и сначала идет сравнение по ссылке, если оно неудачное, то идет сравнение контента.

udn79 пишет:
странно, у меня работает на шарпе
if (string.Empty == null)

string.Empty не равен null. И условие дает false. ты внезапно что-то напутал

udn79 пишет:
Говорят CompareTo быстрей работает,чем equals не проверял

Хватти дезинформацией заниматься

Ответить

Номер ответа: 45
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #45
Добавлено: 06.02.11 16:50
Artyom, да я не удевлюсь если и в Java имплементациях теперь так, просто как-то не посебе от использования == на объекты

Ответить

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

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



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