Лучший способ преобразовать дату JavaScript в дату .NET

Да. Часто обзор хеша хранится как представление ASCII шестнадцатеричных цифр, например, MD5 слова 'хеш':

0800fc577294c34e0b28ad2839435945

Это - строка ASCII с 32 символами.

, Но MD5 действительно производит 128-разрядное двоичное значение хэш-функции. Это должно требовать, чтобы только 16 байтов были сохранены как двоичные значения вместо шестнадцатеричных цифр. Таким образом, можно получить некоторую эффективность пространства при помощи двоичных строк.

CREATE TABLE test.foobar (
  id BINARY(16) NOT NULL PRIMARY KEY
);

INSERT INTO test.foobar (id) VALUES (UNHEX(MD5('hash')));
<час>

Ре. Ваши комментарии, что Вы более обеспокоены производительностью, чем эффективность пространства:

я не знаю ни о какой причине, что Двоичный тип данных был бы более быстрым, чем CHAR.

Являющийся вдвое менее большим может быть преимущество для производительности, если Вы используете кэш-буферы эффективно. Таким образом, данная сумма кэш-памяти может сохранить вдвое больше ценности строк ДВОИЧНЫХ ДАННЫХ, если строка является половиной размера CHAR, должен был сохранить то же значение в шестнадцатеричном числе. Аналогично кэш-память для индекса на том столбце может сохранить вдвое больше.

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

Что касается различия между строкой хеша, сохраненной в ДВОИЧНОМ ФАЙЛЕ по сравнению с BIGINT, я выбрал бы BIGINT. Эффективность кэша будет еще больше, и также на 64-разрядной целочисленной арифметике процессоров, и сравнения должны быть очень быстрыми.

у меня нет измерений для поддержки требований выше. Чистая прибыль предпочитания одного типа данных по другому во многом зависит от шаблонов данных и типов запросов в Вашей базе данных и приложении. Для получения самого точного ответа необходимо попробовать оба решения и измерить различие.

<час>

Ре. Ваша гипотеза, что сравнение двоичной строки более быстро, чем нечувствительное к регистру сравнение строк по умолчанию, я попробовал следующий тест:

mysql> SELECT BENCHMARK(100000000, 'foo' = 'FOO');
1 row in set (5.13 sec)

mysql> SELECT BENCHMARK(100000000, 'foo' = BINARY 'FOO');
1 row in set (4.23 sec)

, Таким образом, сравнение двоичной строки на 17,5% быстрее, чем нечувствительное к регистру сравнение строк. Но заметьте, что после оценки этого выражения 100 миллион раз, общим различием является все еще меньше чем 1 секунда. В то время как мы можем измерить относительную разницу в скорости, абсолютная разность в скорости действительно незначительна.

, Таким образом, я повторю:

  • Мера, не угадывайте или предполагайте. Ваши образованные предположения будут неправильными много времени. Мера прежде и после каждого изменения, которое Вы вносите, таким образом, Вы знаете, какому количеству это помогло.
  • Инвестируют Ваше время и внимание, где Вы получаете самый большой удар для маркера.
  • не потеют маленький материал. Конечно, крошечное различие складывает с достаточными повторениями, но, учитывая те повторения, повышение производительности с большим абсолютным преимуществом все еще предпочтительно.
16
задан NotMe 29 April 2011 в 19:21
поделиться

1 ответ

Конвертировать JavaScript в UTCString со стороны клиента:

var testDate = new Date().toUTCString();

Разобрать его из кода C # (вы можете получить дату JS через вызов веб-службы).

DateTime date = DateTime.Parse(testDate);
13
ответ дан 30 November 2019 в 16:35
поделиться