Страница: 1 | 2 | 3 | 4 | 5 |
|
Вопрос: AgentFire- обратись к дортору неадекват
|
Добавлено: 05.02.11 21:25
|
|
Номер ответа: 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] = "";
  ateTime firstStart = DateTime.Now;
for (int i = 0; i < ITERATIONS_COUNT; i++)
{
  ateTime 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++)
{
  ateTime 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
Из этого примера хорошо видно что нет никакой разницы в скорости работы
Ответить
|
Номер ответа: 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 пишет:
Когда у вас просят пример я только вижу, что вы умеете писать это слово дотнет и больше ничего.
Пожалуйста, выше пример лежит.
Ответить
|
Номер ответа: 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, красавец)))
Ты это имеешь в виду?
- 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
Если ты готов на таком уровне вести дискуссию, мы можем продолжить, если нет, то мне будет очень скучно в этом топике тебе объяснять прописные истины.
Ответить
|
Номер ответа: 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
- ""
- 0: 00:00:02.5740045
- 1: 00:00:02.6364047
- 2: 00:00:02.5896045
- 3: 00:00:02.6364047
- 4: 00:00:02.5740045
- 5: 00:00:02.7924049
- 6: 00:00:02.4648043
- 7: 00:00:02.8392050
- 8: 00:00:02.4336043
- 9: 00:00:02.6208046
- Avg: 00:00:02.6192446
- String.Empty
- 0: 00:00:02.5740046
- 1: 00:00:02.5428044
- 2: 00:00:02.5584045
- 3: 00:00:02.4960044
- 4: 00:00:02.7456048
- 5: 00:00:02.7456049
- 6: 00:00:02.4492043
- 7: 00:00:02.3868042
- 8: 00:00:02.7144047
- 9: 00:00:02.9952053
- Avg: 00:00:02.6223646
Ответить
|
Страница: 1 | 2 | 3 | 4 | 5 |
Поиск по форуму