Я бы использовал linq. Преобразуйте строку в массив с разделителями.
Настройте словарь, содержащий первый элемент ... не уверен, хотите ли вы это сделать. Если нет, просто удалите выражения «d1» и «union».
Запустите Linq, чтобы создать словарь на основе четных чисел.
Тогда, если вы действительно хотите учесть первый элемент, имя_файла, и вы хотите, чтобы это было в начале вашего словаря, то, наконец, вы запустите оператор «союз».
string str = "File_name,cost_per_page,0.23,color_code,343,thickness,0.01";
string[] array = str.Split(',');
Dictionary<string, string> d1 = new Dictionary<string, string>()
{
{ array[0], "" }
};
Dictionary<string, string> d2 = array.Select((i, index) => (index > 0 && index % 2 == 0) ?
new { key = array[index - 1], value = i } : null).Where(i => i != null).ToDictionary(d => d.key, d => d.value);
Dictionary<string, string> result = d1.Union(d2).ToDictionary(k => k.Key, v => v.Value);
foreach (KeyValuePair<string, string> kvp in result)
Console.WriteLine(kvp.Key + ": " + kvp.Value);
return;
другой, и, возможно, более чистый подход:
Это также учитывает имя_файла. Если вы не хотите этого, добавьте «index> 0» к условному оператору, где он проверяет четность.
string str = "File_name,cost_per_page,0.23,color_code,343,thickness,0.01";
string[] array = str.Split(',');
Dictionary<string, string> d2 = array.Select((i, index) => (index % 2 == 0) ?
new
{
key = (index == 0) ? i : array[index - 1],
value = (index == 0) ? "" : i
} : null).Where(i => i != null).ToDictionary(d => d.key, d => d.value);
foreach (KeyValuePair<string, string> kvp in d2)
Console.WriteLine(kvp.Key + ": " + kvp.Value);
Самая большая вещь, которую можно сделать, состоит в том, чтобы искать сканирования таблицы в запросе SQL-сервера анализатор (удостоверьтесь, что Вы включаете "выставочный план выполнения"). Иначе существует несметное число статей в MSDN и в другом месте который даст хороший совет.
Как в стороне, когда я начал учиться оптимизировать запросы, я выполнил профилировщика запроса SQL-сервера против трассировки, посмотрел на сгенерированный SQL и попытался выяснить, почему это было улучшением. Профилировщик запроса совсем не оптимален, но это - достойный запуск.
Изучите то, что действительно продолжается под капотом - необходимо быть в состоянии понять следующие понятия подробно:
Существует несколько вещей, на которые можно посмотреть оптимизировать производительность запросов.
Гарантируют, чтобы у Вас просто был минимум данных. Удостоверьтесь, что Вы выбираете только столбцы, в которых Вы нуждаетесь. Уменьшите размеры поля до минимума.
Полагают, что денормализовывание Вашей базы данных для сокращения соединений
Избегает циклов (т.е. выберите курсоры), придерживайтесь операций присвоения.
Реализация запрос как хранимая процедура, поскольку это предварительно компилируется и выполнится быстрее.
Удостоверяются, что Вам настраивали корректные индексы. Если Ваша база данных используется главным образом для поиска, тогда рассматривают больше индексов.
Использование план выполнения, чтобы видеть, как обработка сделана. То, чего Вы хотите избежать, является сканированием таблицы, поскольку это является дорогостоящим.
Удостоверяются, что Автоматическая Статистика установлена на на. SQL нужно это, чтобы помочь решить оптимальное выполнение. См. большое сообщение Mike Gunderloy для большего количества информации Основы Статистики в SQL Server, 2005
Удостоверяется, что Ваши индексы не фрагментируются. Уменьшающая Индексная Фрагментация SQL Server
Я думаю с помощью SQL-запроса, анализатор был бы хорошим началом.
Используйте с statment для обработки фильтрации запроса. Ограничьте каждый подзапрос минимальным количеством возможных строк. тогда присоединитесь к подзапросам.
WITH
master AS
(
SELECT SSN, FIRST_NAME, LAST_NAME
FROM MASTER_SSN
WHERE STATE = 'PA' AND
GENDER = 'M'
),
taxReturns AS
(
SELECT SSN, RETURN_ID, GROSS_PAY
FROM MASTER_RETURNS
WHERE YEAR < 2003 AND
YEAR > 2000
)
SELECT *
FROM master,
taxReturns
WHERE master.ssn = taxReturns.ssn
подзапросы А в с оператором могут закончиться как совпадающий со встроенными представлениями или автоматически генерировали временные таблицы. Я нахожу в работе, которую я делаю, розничные данные, это приблизительно 70-80% времени, существует выигрыш в производительности.
100% времени, существует преимущество обслуживания.
В Oracle можно посмотреть эти , объясняет план сравнить вариации на запрос
Удостоверьтесь, что у Вас есть правильные индексы на таблице. если Вы часто используете столбец в качестве способа заказать или ограничить Ваш набор данных, индекс может иметь большое значение. Я видел в недавней статье, которые выбирают отличный, может действительно замедлить запрос, особенно если у Вас нет индекса.
Очевидная оптимизация для Запросов Select гарантирует, чтобы у Вас были индексы на столбцах, используемых для соединений или в операторах Where.
Начиная с добавления индексов может замедлиться, данные пишут, что действительно необходимо контролировать производительность, чтобы гарантировать, чтобы Вы не уничтожали производительность записи DB, но это - то, где использование хорошего аналитического инструмента запроса может помочь Вам balanace вещи соответственно.