udn79, смотри, что тебе нужно сделать:.
во-первых, находишь стенку..
потом тебе обязательно необходимо хорошо так.. разбежаться.
Интернирование имеет два положительных эффекта: оно уменьшает потребление памяти и уменьшает время сравнения двух строк.
1) String.Empty - можно сказать, - это директива компиляции, вынесенная в код чтобы дать возможность пользователю выборочного применения оптимизации для использования команд сравнения строк. Вынесена специально, так как все остальные характеристики у этого класса сильно снизятся и скорость выполнения самого процесса сильно упадет. Ты путаешь такие понятие как класс объекта и тип данных, что не одно и тоже.
2) Переводить стрелки на ограничение возможностей, какого либо языка, так же неадекватно. Я тоже могу сказать:
Что на архитектурном уровне команд микропроцессора, операции со строками и массивами выполняются через указатели. Так как нельзя передать в 32/64 регистр значение, которое его превышает.
Я может, не знаю каких-то терминов, но я могу отличить, когда в объекте суждения подменяют объекты либо субъекты суждения.
Зная архитектуру команд микропроцессоров, также языков начиная от Assembler-
без знания которого невозможно анализировать и отлаживать бинарники.
Как минимум основ и синтаксиса популярных языков С++, С#, Delphi, vb6, Java и линейки .Net.
Директив загрузки OS, например /debug без которой нельзя отлаживать и внедряться в системные процессы без конфликтов.
Основных скриптовых: bat\cmd, VBScript, Jacascript (один из мощнейших).
Объектных: 1С, HTML, Javascript, CSS, Macromedia Flash.
Хрень вроде Нейронные сети, думал если умные люди читают и мне нужно.
Знание архитектуры написания собственных средств разработки, концепций программирования, синтаксиса. Я могу перевести код с одного языка на другой.
Хочешь спросить, зачем я все это написал?
Это к тому чтобы ты понимал, что отвечаю я или делаю замечания, предварительно осмыслив мною написанный текст.
Выражения вроде
udn79, смотри, что тебе нужно сделать:.
во-первых, находишь стенку..
потом тебе обязательно необходимо хорошо так.. разбежаться.
Примени к себе, блондин(-ка). Может ты, хоть станешь брюнетом.
String.Empty - можно сказать, - это директива компиляции
String.Empty это static поле класса String, которое равно "" и больше об этом поле сказать нечего, даже в MSDN ни одной лишней строчкой оно не удостоилось.
вынесенная в код чтобы дать возможность пользователю выборочного применения оптимизации для использования команд сравнения строк. Вынесена специально, так как все остальные характеристики у этого класса сильно снизятся и скорость выполнения самого процесса сильно упадет.
бред какой-то, какие такие характеристики класса String сильно снизятся и скорость каких процесов упадет?
Мда, я не буду перечислять всех хорактеристик.
Но если String.Empty и "" это одно и тоже, тогда почему алгоритм например в цикле с использование "" выполняется быстрее чем String.Empty?
Artyom, не доходит читай по слогам и фрызы целиком.
Но если String.Empty и "" это одно и тоже, тогда почему алгоритм например в цикле с использование "" выполняется быстрее чем String.Empty?
Чтоб говорить почему в каком-то алгоритме что-то выполняется быстрее или медленнее, нужно привести полный код этого алгоритма и описать, в каких условиях что-то выполняется быстрее, а что медленнее.
Я, например, могу привести код некого алгоритма (для примера возьмем не очень оптимальный алгоритм сортировки вставкой, который, однако, будет показывать высокую скорость, так как наш массив уже является отсортированным)
publicstaticvoid Sort(string[] array)
{
for (int j = 1; j < array.Length; j++)
{
string key = array[j];
int i = j - 1;
while (i >= 0 && array.CompareTo(key) > 0)
{
array[i + 1] = array;
i--;
}
array[i + 1] = key;
}
}
Вот вызывающий код
staticvoid Main(string[] args)
{
constint ARRAY_SIZE = 20000000;
constint ITERATIONS_COUNT = 10;
string[] array = newstring[ARRAY_SIZE];
Console.WriteLine(@"""""");
for (int i = 0; i < array.Length; i++)
array = "";
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 = 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
Из этого примера хорошо видно что нет никакой разницы в скорости работы