В настоящее время я получаю стенное время выполнения своей программы в секундах путем вызова:
time_t startTime = time(NULL);
//section of code
time_t endTime = time(NULL);
double duration = difftime(endTime, startTime);
Действительно ли возможно получить стенное время в миллисекундах? Раз так, как?
Если вы используете POSIX-машину, используйте вместо нее gettimeofday ()
; это дает вам разумную портативность и разрешение в микросекундах.
Немного более эзотерическим, но и в POSIX является функция clock_gettime ()
, которая дает наносекундное разрешение.
Во многих системах вы найдете функцию ftime ()
, которая фактически возвращает вам время в секундах и миллисекундах. Однако его больше нет в спецификации Single Unix (примерно такой же, как POSIX). Вам нужен заголовок
:
struct timeb mt;
if (ftime(&mt) == 0)
{
mt.time ... seconds
mt.millitime ... milliseconds
}
Он восходит к версии 7 (или 7-го издания) Unix, по крайней мере, поэтому он был очень широко доступен.
У меня также есть примечания в моем коде субсекундного таймера на times ()
и clock ()
, которые снова используют другие структуры и заголовки. У меня также есть заметки о Windows, использующей clock ()
с 1000 тактов в секунду (время в миллисекундах) и более старый интерфейс GetTickCount ()
, который отмечен как необходимый в Windows 95, но не на NT.
Если вы можете сделать это вне самой программы, в Linux вы можете использовать команду time
( time ./ моя_программа
).
На Windows используйте QueryPerformanceCounter и связанную с ним частоту QueryPerformanceFrequency. Они не дают времени, переводимого в календарное время, поэтому при необходимости запросите время с помощью CRT API и сразу же используйте QueryPerformanceCounter. Затем можно сделать некоторое простое сложение/вычитание для вычисления календарного времени, с некоторой ошибкой из-за времени, необходимого для последовательного выполнения API. Эй, это же компьютер, а чего вы ожидали???
Можно использовать функцию time
модуля strptime ()
:
import time
date = input('Date (mm/dd/yyyy): ')
try:
valid_date = time.strptime(date, '%m/%d/%Y')
except ValueError:
print('Invalid date!')
Обратите внимание, что в Python 2 .x необходимо использовать raw _ input
вместо input
.
Хэш-таблица
реализует карту
. Функция Map.entureSet
возвращает коллекцию ( Наборы
) экземпляров Map.Entry
, имеющих методы getKey
и getValue
.
Итак:
Iterator<Map.Entry> it;
Map.Entry entry;
it = yourTable.entrySet().iterator();
while (it.hasNext()) {
entry = it.next();
System.out.println(
entry.getKey().toString() + " " +
entry.getValue().toString());
}
Если известны типы записей в хэш-таблице, можно использовать шаблоны для исключения вызовов toString
выше. Например, запись
может быть объявлена как Map.Entry < Последовательность, Последовательность >
, если хэш-таблица объявлена как Хэш-таблица < Последовательность, Последовательность >
.
Если вы можете комбинировать шаблоны с дженериками, это просто коротко:
for (Map.Entry<String,String> entry : yourTable.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
Это предполагает, что ваша таблица
является хэш-таблицей < Последовательность, Последовательность >
. Просто покажет, как далеко Ява зашла за последние несколько лет, в значительной степени не потеряв свой существенный Java-ness.
Немного OT: Если синхронизация не требуется, используйте HashMap
вместо Hashtable
. В этом случае используйте ConcurrentHashMap
(спасибо, акаппа!).
Недавно я написал запись в блоге, в которой объясняется , как получить время в миллисекундах между платформами .
Он будет работать как время (NULL), но будет возвращать количество миллисекунд вместо секунд из эпохи Unix в окнах и Linux.
#ifdef WIN32
#include <Windows.h>
#else
#include <sys/time.h>
#include <ctime>
#endif
/* Returns the amount of milliseconds elapsed since the UNIX epoch. Works on both
* windows and linux. */
int64 GetTimeMs64()
{
#ifdef WIN32
/* Windows */
FILETIME ft;
LARGE_INTEGER li;
uint64 ret;
/* Get the amount of 100 nano seconds intervals elapsed since January 1, 1601 (UTC) and copy it
* to a LARGE_INTEGER structure. */
GetSystemTimeAsFileTime(&ft);
li.LowPart = ft.dwLowDateTime;
li.HighPart = ft.dwHighDateTime;
ret = li.QuadPart;
ret -= 116444736000000000LL; /* Convert from file time to UNIX epoch time. */
ret /= 10000; /* From 100 nano seconds (10^-7) to 1 millisecond (10^-3) intervals */
return ret;
#else
/* Linux */
struct timeval tv;
uint64 ret;
gettimeofday(&tv, NULL);
ret = tv.tv_usec;
/* Convert from micro seconds (10^-6) to milliseconds (10^-3) */
ret /= 1000;
/* Adds the seconds (10^0) after converting them to milliseconds (10^-3) */
ret += (tv.tv_sec * 1000);
return ret;
#endif
}
Вы можете изменить его, чтобы вернуть микросекунды вместо миллиэсконд, если хотите.
Я всегда использую первый. Второй, по-видимому, способ защиты от jquery переопределяется. Одна из причин, по которой вы можете это сделать, - если вы не знаете, какие другие сценарии будут загружены на страницу. Если все ваши вещи зависят, скажем, от jquery 1.3, и вы находитесь в среде, где вы не контролируете всю страницу, ваш код может сломаться, если кто-то загрузится в jquery 1.4. Звучит уродливо, но такое случается. Таким образом, вы можете прикрыть свою задницу, создав замыкание сразу после загрузки jquery, и держа свою версию jquery внутри этого замыкания. Я думаю, это то, что происходит во втором примере.
Ни один из них фактически не инициализирует jquery. Jquery заботится о любой инициализации, которая ему нужна самостоятельно. По-прежнему, вполне вероятно, что вы будете использовать первый пример, даже если бы вы использовали второй, вы бы просто поместить $ (документ) .ready внутри функции во втором примере.
-121--1256265-У меня также была та же проблема и решение, что и у Рика, за исключением того, что я импортировал существующий .edmx в новый проект, и хотя базовое пространство имен не имело значения, оно было импортировано в другую подкаталогу, поэтому я также должен был обновить последовательность соединения в Web.Config в трех местах, чтобы включить различные подкаталоги
-121--1778439-
Библиотека GLib с открытым исходным кодом имеет систему GTimer, которая утверждает, что обеспечивает микросекундную точность. Эта библиотека доступна в Mac OS X, Windows и Linux. В настоящее время я использую его для выполнения тайминга производительности в Linux, и он, кажется, работает идеально.
gprof
, который является частью инструментария GNU, является опцией. В большинстве систем POSIX он будет установлен, и он доступен в Cygwin для Windows. Самостоятельное отслеживание времени с помощью gettimeofday ()
работает нормально, но по производительности эквивалентно использованию операторов печати для отладки. Это хорошо, если вам просто нужно быстрое и грязное решение, но это не так элегантно, как использование подходящих инструментов.
Чтобы использовать gprof
, вы должны указать опцию -pg при компиляции с gcc
как в:
gcc -o prg source.c -pg
Затем вы можете запустить gprof
на сгенерированном запрограммируйте следующим образом:
gprof prg > gprof.out
По умолчанию gprof будет генерировать общее время выполнения вашей программы, а также количество времени, затраченного на каждую функцию, количество раз, когда каждая функция была вызвана, среднее время, затраченное на каждый вызов функции, и аналогичная информация.
Существует большое количество параметров, которые можно установить с помощью gprof
. Если вам интересно, дополнительную информацию можно найти на страницах руководства или через Google.