Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

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

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

Ответить

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

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #16 Добавлено: 06.02.11 08:09
Но если String.Empty и "" это одно и тоже, тогда почему алгоритм например в цикле с использование "" выполняется быстрее чем String.Empty?

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

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

        public static void Sort(string[] array)
        {
            for (int j = 1; j < array.Length; j++)
            {
                string key = array[j];

                int i = j - 1;
                while (i >= 0 && array[i].CompareTo(key) > 0)
                {
                    array[i + 1] = array[i];
                    i--;
                }
                array[i + 1] = key;
            }
        }


Вот вызывающий код

        static void Main(string[] args)
        {
            const int ARRAY_SIZE = 20000000;
            const int ITERATIONS_COUNT = 10;

            string[] array = new string[ARRAY_SIZE];

            Console.WriteLine(@"""""";);
            for (int i = 0; i < array.Length; i++)
                array[i] = "";

            ;DateTime firstStart = DateTime.Now;
            for (int i = 0; i < ITERATIONS_COUNT; i++)
            {
                ;DateTime start = DateTime.Now;
                Sort(array);
                Console.WriteLine("{0}: {1}", i, DateTime.Now.Subtract(start));
            }
            Console.WriteLine("Avg: {0}", new TimeSpan(DateTime.Now.Subtract(firstStart).Ticks / ITERATIONS_COUNT));

            Console.WriteLine("String.Empty";);
            for (int i = 0; i < array.Length; i++)
                array[i] = String.Empty;

            firstStart = DateTime.Now;
            for (int i = 0; i < 10; i++)
            {
                ;DateTime start = DateTime.Now;
                Sort(array);
                Console.WriteLine("{0}: {1}", i, DateTime.Now.Subtract(start));
            }
            Console.WriteLine("Avg: {0}", new TimeSpan(DateTime.Now.Subtract(firstStart).Ticks / ITERATIONS_COUNT));



            Console.ReadLine();
            
        }


Вот результат
(Intel Core 2 Duo E6750, 6 GB RAM, 400GB + 1TB HDD, GeForce 9600GT, Windows 7, VS 2010, .NET Framework 4.0, сборка Release, запуск без отладчика)
""
0: 00:00:02.5701470
1: 00:00:02.5501459
2: 00:00:02.5291447
3: 00:00:02.5321448
4: 00:00:02.5221442
5: 00:00:02.5441455
6: 00:00:02.5291447
7: 00:00:02.5241444
8: 00:00:02.6141495
9: 00:00:02.7481572
Avg: 00:00:02.5665468
String.Empty
0: 00:00:02.6211499
1: 00:00:02.5181440
2: 00:00:02.5211442
3: 00:00:02.5501458
4: 00:00:02.5221443
5: 00:00:02.5301447
6: 00:00:02.5281446
7: 00:00:02.5421454
8: 00:00:02.5261445
9: 00:00:02.5221442
Avg: 00:00:02.5385451


Из этого примера хорошо видно что нет никакой разницы в скорости работы

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #17 Добавлено: 06.02.11 08:11
Еще одна попытка...

  1.         static void Main(string[] args)
  2.         {
  3.             const int ARRAY_SIZE = 20000000;
  4.             const int ITERATIONS_COUNT = 10;
  5.  
  6.             string[] array = new string[ARRAY_SIZE];
  7.  
  8.             Console.WriteLine(@"""""");
  9.             for (int i = 0; i < array.Length; i++)
  10.                 array[ i ] = "";
  11.  
  12.             DateTime firstStart = DateTime.Now;
  13.             for (int i = 0; i < ITERATIONS_COUNT; i++)
  14.             {
  15.                 DateTime start = DateTime.Now;
  16.                 Sort(array);
  17.                 Console.WriteLine("{0}: {1}", i, DateTime.Now.Subtract(start));
  18.             }
  19.             Console.WriteLine("Avg: {0}", new TimeSpan(DateTime.Now.Subtract(firstStart).Ticks / ITERATIONS_COUNT));
  20.  
  21.             Console.WriteLine("String.Empty");
  22.             for (int i = 0; i < array.Length; i++)
  23.                 array[ i ] = String.Empty;
  24.  
  25.             firstStart = DateTime.Now;
  26.             for (int i = 0; i < 10; i++)
  27.             {
  28.                 DateTime start = DateTime.Now;
  29.                 Sort(array);
  30.                 Console.WriteLine("{0}: {1}", i, DateTime.Now.Subtract(start));
  31.             }
  32.             Console.WriteLine("Avg: {0}", new TimeSpan(DateTime.Now.Subtract(firstStart).Ticks / ITERATIONS_COUNT));
  33.  
  34.  
  35.  
  36.             Console.ReadLine();
  37.             
  38.         }
  39.  
  40.         public static void Sort(string[] array)
  41.         {
  42.             for (int j = 1; j < array.Length; j++)
  43.             {
  44.                 string key = array[j];
  45.  
  46.                 int i = j - 1;
  47.                 while (i >= 0 && array[ i ].CompareTo(key) > 0)
  48.                 {
  49.                     array[i + 1] = array[ i ];
  50.                     i--;
  51.                 }
  52.                 array[i + 1] = key;
  53.             }
  54.         }

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #18 Добавлено: 06.02.11 08:21
udn79 пишет:
Ты откуда велез доктор речь шла о VB6, однин AgentFire стал говорить о интернирование строк, да откуда там вообще это взялось, ты то хоть подумал?

Я вообще не знаю с чего у вас спор начался. Вы хотели String.Empty, я вам его дал. Ко мне какие претензии?
Класс String это дотнетовский класс, String.Empty это поле класса String. В VB6 такой конструкции не было, насколько я помню, поэтому не нужно сюда шестерку приплетать, а если периплетаешь то четче указывай в каком контексте и зачем.

udn79 пишет:
Когда пишу свое мнение ты переворачиваешь и выдаешь это за утверждение.

Ты пишешь "мнение", что String.Empty является "директивой компиляции" (цитирую дословно, если уж хочешь). Я тебе объясняю что String.Empty не является ею (директивой), а является обычным полем класса String и ничем иным. В чем проблема? Ну не директива это, что тут поделаешь....

udn79 пишет:
Когда у вас просят пример я только вижу, что вы умеете писать это слово дотнет и больше ничего.

Пожалуйста, выше пример лежит.

Ответить

Номер ответа: 19
Автор ответа:
 Nezhniy



ICQ: 419841508 

Вопросов: 9
Ответов: 100
 Web-сайт: www.helpim.ru
 Профиль | | #19
Добавлено: 06.02.11 10:53
Artyom, хорош)

Ответить

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



Вопросов: 2
Ответов: 95
 Профиль | | #20 Добавлено: 06.02.11 13:46
Да ты меня убедил, когда использовал перед использованием String.Empty, проверил еще и длину строки array.Length, красавец)))

Ответить

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



Вопросов: 2
Ответов: 95
 Профиль | | #21 Добавлено: 06.02.11 13:49
Artyom ты откуда вылез доктор, эта фраза здесь уже звучала, если скролинг не работает, я буду твоим навигатором
http://vbnet.ru/forum/show.aspx?id=213868&tolastpage=true#18

Ответить

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



Вопросов: 2
Ответов: 95
 Профиль | | #22 Добавлено: 06.02.11 13:57
Извини, но не та ссылка, но ты тупишь или прикидываешься, ты говоришь что не знаешь о чем спор и сам же его цитируешь

udn79 пишет:
Ты откуда велез доктор речь шла о VB6, однин AgentFire стал говорить о интернирование строк, да откуда там вообще это взялось, ты то хоть подумал?

 ты же читал это
http://vbnet.ru/forum/show.aspx?id=213868&page=1#12



Ты же читал цитируешь.

Сам обьект спора возник на странице
http://www.vbnet.ru/forum/show.aspx?id=213291&page=2

Ответить

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



Вопросов: 2
Ответов: 95
 Профиль | | #23 Добавлено: 06.02.11 13:59
В порыве я тоже могу бред нести типо следующего
Да ты меня убедил, когда использовал перед использованием String.Empty, проверил еще и длину строки array.Length, красавец)))


Но я хоть могу признать, что здесь неправ, и сказал чушь.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #24 Добавлено: 06.02.11 14:38
Чувак, я тебе привел код который показывает, что твое утверждение по поводу разницы между String.Empty и "" не соответствует действительности. Это не потому что я такой плохой, а потому что так оно и есть. Если ты с этим не согласен, приведи код, который покажет что разница между String.Empty и "" есть, мы посмотрим и объясним, есть ли там разница на самом деле, и если есть, то почему.

По поводу спора byte[] vs string могу сказать, что есть разница хотя бы в том, что в byte[] один элемент занимает 1 байт, а в string - 2 байта.

Вопросы?

udn79 пишет:
Да ты меня убедил, когда использовал перед использованием String.Empty, проверил еще и длину строки array.Length, красавец)))

Ты это имеешь в виду?

  1. for (int j = 1; j < array.Length; j++)


Информирую о том что
1) Это стандартный синтаксис циклов в C#
2) Это array.length это не длина строки, а кол-во элементов в массиве array.

Если считаешь что мой код был необъективным, говори в чем он необъективный, и давай пример объективного сравнения "" и String.Empty

Во избежании недоразумений рекомендую для начала ознакомиться с другим моим сообщением
http://vbnet.ru/forum/show.aspx?id=213471&page=3#39
Если ты готов на таком уровне вести дискуссию, мы можем продолжить, если нет, то мне будет очень скучно в этом топике тебе объяснять прописные истины.

Ответить

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



Вопросов: 2
Ответов: 95
 Профиль | | #25 Добавлено: 06.02.11 14:48
В порыве я тоже могу бред нести типо следующего
Да ты меня убедил, когда использовал перед использованием String.Empty, проверил еще и длину строки array.Length, красавец)))
Но я хоть могу признать, что здесь неправ, и сказал чушь.


Ты читать умеешь, там написано, что бред

Ответить

Номер ответа: 26
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #26 Добавлено: 06.02.11 14:50
ппц, только читать и успеваю :)
udn79, признаешь фейл?

Ответить

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



Вопросов: 2
Ответов: 95
 Профиль | | #27 Добавлено: 06.02.11 15:04
Ты издеваешься, компилятор не такой тупой, чтобы записывать в пустой массив
Пустые значения, даже на уровне компиляции он отбросит не нужные операции.

Мне что еще нужно объяснять, что такое операции?
If []==String.Empty // где []
Case []==String.Empty // сравниваемое значение
и т.д. думаю ключевые слова ты должен и сам знать.

Твой код фулельный, основанный на незнание, даже основ процесса компиляции

Ответить

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



Вопросов: 2
Ответов: 95
 Профиль | | #28 Добавлено: 06.02.11 15:33
Есть "IDA pro" и "olly debug", еще есть книги по "искусству дизассемблирования" и "Образ мышления дизассемблера IDA",
В которых перечислены если не все то очень многие: алгоритмы, процессы и много всего прочего.
Можно сомневаться, что там написано, но каждый описанный алгоритм выполняется под отладчиком, для изучения работы с отладчиком.
Вот таким доводам я верю, что проверена и сам можешь проверить.

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


Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #29 Добавлено: 06.02.11 15:46
Есть "IDA pro" и "olly debug", еще есть книги по "искусству дизассемблирования" и "Образ мышления дизассемблера IDA",
В которых перечислены если не все то очень многие: алгоритмы, процессы и много всего прочего.
Можно сомневаться, что там написано, но каждый описанный алгоритм выполняется под отладчиком, для изучения работы с отладчиком.
Вот таким доводам я верю, что проверена и сам можешь проверить.

Так я тебе и привел код, который ты сам можешь проверить, проверь. Что мешает? Запусти, подключись отладчиком, профайлером, вытяни машинный код, расскажи нам, где что происходит.

Но слушать от делетантов, бредовые высказывания вычитанные непонятно откуда, неправильно написанные.

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

Да еще хвастающегося своим ниже среднего ПК, увы не по мне.

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

Не нравится мой комп, вот тебе другой.
Intel Core i7 930, 12 GB RAM, Windows Server 2008 R2
  1. ""
  2. 0: 00:00:02.5740045
  3. 1: 00:00:02.6364047
  4. 2: 00:00:02.5896045
  5. 3: 00:00:02.6364047
  6. 4: 00:00:02.5740045
  7. 5: 00:00:02.7924049
  8. 6: 00:00:02.4648043
  9. 7: 00:00:02.8392050
  10. 8: 00:00:02.4336043
  11. 9: 00:00:02.6208046
  12. Avg: 00:00:02.6192446
  13. String.Empty
  14. 0: 00:00:02.5740046
  15. 1: 00:00:02.5428044
  16. 2: 00:00:02.5584045
  17. 3: 00:00:02.4960044
  18. 4: 00:00:02.7456048
  19. 5: 00:00:02.7456049
  20. 6: 00:00:02.4492043
  21. 7: 00:00:02.3868042
  22. 8: 00:00:02.7144047
  23. 9: 00:00:02.9952053
  24. Avg: 00:00:02.6223646

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #30 Добавлено: 06.02.11 15:54
udn79 пишет:
Мне что еще нужно объяснять, что такое операции?
If []==String.Empty // где []
Case []==String.Empty // сравниваемое значение
и т.д. думаю ключевые слова ты должен и сам знать.


А чем String.CompareTo тебе не операция?

Ответить

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

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



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