﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Точное время</title>
  <id>~/topic/3404/tochnoe-vremya/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-03T17:41:25Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3404" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/24095/</id>
    <title type="text">Залил я фикс в 4.1.8. Все равно больше плюсов, чем минусов.</title>
    <published>2013-02-17T18:07:46Z</published>
    <updated>2013-02-17T18:07:46Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Залил я фикс в 4.1.8. Все равно больше плюсов, чем минусов.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24094/</id>
    <title type="text">Грубо говоря, детерминированность - это сложность алгоритма (не путать со сложностью кода). А реальн...</title>
    <published>2013-02-17T18:03:22Z</published>
    <updated>2013-02-17T18:03:22Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.ru/posts/m/24093/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Грубо говоря, детерминированность - это сложность алгоритма (не путать со сложностью кода). А реальное время - это гарантия скорости.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Не понимаю как, &amp;quot;однозначность&amp;quot; завязана на &amp;quot;сложность&amp;quot; или на &amp;quot;скорость&amp;quot;.&lt;br /&gt;Я имел в виду, что детерменированные счётчики в Windows - это, наверное, только счётчики затраченных операций, и то не факт. Все остальные могут показать любые значения. По настроению. :)   &lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24093/</id>
    <title type="text">Если это и имелось в виду под детерменированностью, то должен огорчить: Windows - не система реально...</title>
    <published>2013-02-17T17:51:20Z</published>
    <updated>2013-02-17T17:51:20Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.ru/posts/m/24092/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Если это и имелось в виду под детерменированностью, то должен огорчить: Windows - не система реального времени&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Детерминированность != реальное время.&lt;br /&gt;&lt;br /&gt;Грубо говоря, детерминированность - это сложность алгоритма (не путать со сложностью кода). А реальное время - это гарантия скорости.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24092/</id>
    <title type="text">PS Если это и имелось в виду под детерменированностью, то должен огорчить: Windows - не система реал...</title>
    <published>2013-02-17T17:44:08Z</published>
    <updated>2013-02-17T17:44:43Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">PS&lt;br /&gt;Если это и имелось в виду под детерменированностью, то должен огорчить: Windows - не система реального времени, поэтому точность StopWatch хоть и выше, но всё равно не идеальна. При этом и то, и другое одинаково зависит от общей загруженности процессора, потому что оба используют системные таймеры.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24091/</id>
    <title type="text">Дело в не скорости исполнения, а в том, что в отличие от StopWatch, DateTime.Now - это недетерминиро...</title>
    <published>2013-02-17T17:34:37Z</published>
    <updated>2013-02-17T17:34:37Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.ru/posts/m/24090/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Дело в не скорости исполнения, а в том, что в отличие от StopWatch, DateTime.Now - это недетерминированная операция. Тоесть время может быть и практически мгновенным, а может и залипнуть на пару секунд. Это все зависит от текущей загруженности компьютера. StopWatch же гарантирует кол-во тактов, за которое может быть выполнена операция.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Ни та, ни другая операция не залипает. &lt;br /&gt;при тех же 10000000 - оба суммарных значения бегают между 0.60 и 1.3 с (сборщик мусора шалит). Так что можно считать полное отсутствие задержки в обоих случаях. &lt;br /&gt;Залипают только фактические значения DateTime.Now.&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24090/</id>
    <title type="text">Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тян...</title>
    <published>2013-02-17T17:23:26Z</published>
    <updated>2013-02-17T17:23:26Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.ru/posts/m/24089/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.ru/posts/m/24087/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тянуться в течении всей жизни приложения.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;10000000 запусков в цикле - 1.12 с&lt;br /&gt;Можно считать, нет погрешности.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Дело в не скорости исполнения, а в том, что в отличие от StopWatch, DateTime.Now - это недетерминированная операция. Тоесть время может быть и практически мгновенным, а может и залипнуть на пару секунд. Это все зависит от текущей загруженности компьютера. StopWatch же гарантирует кол-во тактов, за которое может быть выполнена операция.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24089/</id>
    <title type="text">Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тян...</title>
    <published>2013-02-17T17:16:30Z</published>
    <updated>2013-02-17T17:16:30Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.ru/posts/m/24087/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тянуться в течении всей жизни приложения.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;10000000 запусков в цикле - 1.12 с&lt;br /&gt;Можно считать, нет погрешности.&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24087/</id>
    <title type="text">А нет. Это наводки от прекомпиляции. Одинаковый перфоманс. _startDate = DateTime.Now; _timer.Start()...</title>
    <published>2013-02-17T17:05:36Z</published>
    <updated>2013-02-17T17:05:36Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.ru/posts/m/24081/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А нет. Это наводки от прекомпиляции.&lt;br /&gt;Одинаковый перфоманс.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;_startDate = DateTime.Now;&lt;br /&gt;_timer.Start();&lt;br /&gt;&lt;br /&gt;Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тянуться в течении всей жизни приложения.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24081/</id>
    <title type="text">А нет. Это наводки от прекомпиляции. Одинаковый перфоманс.</title>
    <published>2013-02-17T16:14:12Z</published>
    <updated>2013-02-17T16:14:12Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">А нет. Это наводки от прекомпиляции.&lt;br /&gt;Одинаковый перфоманс.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24080/</id>
    <title type="text">Я думал, что перфоманс моего вызова будет хуже, но не значительно, но оказалось: На 10000 вызовов - ...</title>
    <published>2013-02-17T16:09:20Z</published>
    <updated>2013-02-17T16:09:20Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Я думал, что перфоманс моего вызова будет хуже, но не значительно, но оказалось:&lt;br /&gt;На 10000 вызовов&lt;br /&gt;- DateTime.Now + NowOffset = 0.0892 с&lt;br /&gt;- LoggingHelper.Now = 0,0002399 с</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24078/</id>
    <title type="text"> Как я написал, целью было изменить LoggingHelper.Now Да, теперь понятно. Интересно, насколько перфо...</title>
    <published>2013-02-17T15:53:30Z</published>
    <updated>2013-02-17T15:53:30Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.ru/posts/m/24077/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Как я написал, целью было изменить LoggingHelper.Now&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Да, теперь понятно. Интересно, насколько перфоманс изменился.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24077/</id>
    <title type="text">А причем тут лог? Был переделан метод, синхронизирующий время с атомными часами. Как я написал, цель...</title>
    <published>2013-02-17T15:24:04Z</published>
    <updated>2013-02-17T15:24:04Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.ru/posts/m/24076/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;А причем тут лог? Был переделан метод, синхронизирующий время с атомными часами.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Как я написал, целью было изменить&lt;br /&gt;LoggingHelper.Now&lt;br /&gt;Которое используется практически везде. В частности в логах.&lt;br /&gt;Синхронизация времени просто приведена в соответствие с новой логикой вычисления LoggingHelper.Now.&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24076/</id>
    <title type="text">Это не позволяет видеть время выполнения операций в логе, не запуская лишний раз профайлер. А причем...</title>
    <published>2013-02-17T15:20:36Z</published>
    <updated>2013-02-17T15:20:36Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.ru/posts/m/24073/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Это не позволяет видеть время выполнения операций в логе, не запуская лишний раз профайлер.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;А причем тут лог? Был переделан метод, синхронизирующий время с атомными часами.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24073/</id>
    <title type="text">Я так понимаю, смысл в том, чтобы повысить точность передаваемого dtNow, а не добавление миллисекунд...</title>
    <published>2013-02-17T15:13:34Z</published>
    <updated>2013-02-17T15:13:34Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.ru/posts/m/24072/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Я так понимаю, смысл в том, чтобы повысить точность передаваемого dtNow, а не добавление миллисекунд (DateTime.Now имеет точность до наносекунд, другое дело, что его время вычисления дискретно)?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Смысл в реализации Now. Остальное всё - следствия и частности.&lt;br /&gt;DateTime.Now при частом вызове просто возвращает прошлые значения. &lt;br /&gt;Погрешность DateTime.Now при этом составляет десятки миллисекунд.&lt;br /&gt;Это не позволяет видеть время выполнения операций в логе, не запуская лишний раз профайлер.&lt;br /&gt;Ну и просто лог выглядит глупо :)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24072/</id>
    <title type="text"> var dtNow = _startDate + _timer.Elapsed; NowOffset = new NtpClient().GetLocalTime(TimeZoneInfo.Loca...</title>
    <published>2013-02-17T15:07:05Z</published>
    <updated>2013-02-17T15:07:05Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;VassilSanych &lt;a href="https://stocksharp.ru/posts/m/24070/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

var dtNow = _startDate + _timer.Elapsed;
NowOffset = new NtpClient().GetLocalTime(TimeZoneInfo.Local, timeout).Subtract(dtNow);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Я так понимаю, смысл в том, чтобы повысить точность передаваемого dtNow, а не добавление миллисекунд (DateTime.Now имеет точность до наносекунд, другое дело, что его время вычисления дискретно)?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/24070/</id>
    <title type="text">Раз уж есть исходники, вот небольшая доработка для тех, кому позарез нужны миллисекунды public stati...</title>
    <published>2013-02-17T13:48:22Z</published>
    <updated>2013-02-17T13:48:22Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.ru/users/6491/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Раз уж есть исходники, вот небольшая доработка для тех, кому позарез нужны миллисекунды&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_2395c1d5410d45839b0fa2ad86b3c56a');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_2395c1d5410d45839b0fa2ad86b3c56a' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
public static class LoggingHelper
	{
		private static readonly Stopwatch _timer;
		private static readonly DateTime _startDate;
		static LoggingHelper()
		{
			_timer = new Stopwatch();
			_startDate = DateTime.Now;
			_timer.Start();
		}

		/// &amp;lt;summary&amp;gt;
		/// Текущее время.
		/// &amp;lt;/summary&amp;gt;
		public static DateTime Now
		{
			get { return _startDate + _timer.Elapsed + NowOffset; }
		}

		/// &amp;lt;summary&amp;gt;
		/// Временное смещение. Неоходимо устанавливать, когда торговая программа работает с неточными настройками локального времени.
		/// Значение &amp;lt;see cref=&amp;quot;Now&amp;quot;/&amp;gt; будет корректироваться в зависимости от установленного значения.
		/// &amp;lt;/summary&amp;gt;
		public static TimeSpan NowOffset { get; set; }

		private static TimeSpan _timeZoneOffset = TimeZoneInfo.Local.BaseUtcOffset;

		/// &amp;lt;summary&amp;gt;
		/// Временное смещение временной зоны.
		/// &amp;lt;/summary&amp;gt;
		public static TimeSpan TimeZoneOffset
		{
			get { return _timeZoneOffset; }
			set { _timeZoneOffset = value; }
		}

		/// &amp;lt;summary&amp;gt;
		/// Синхронизировать &amp;lt;see cref=&amp;quot;NowOffset&amp;quot;/&amp;gt; между локальным временем на компьютере и NTP сервером в интернете.
		/// &amp;lt;/summary&amp;gt;
		/// &amp;lt;param name=&amp;quot;timeout&amp;quot;&amp;gt;Таймаут синхронизации в милисекундах.&amp;lt;/param&amp;gt;
		public static void SyncMarketTime(int timeout = 5000)
		{
			var dtNow = _startDate + _timer.Elapsed;
			NowOffset = new NtpClient().GetLocalTime(TimeZoneInfo.Local, timeout).Subtract(dtNow);
		}
.....
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Критика приветствуется</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>