Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			VassilSanych Код
var dtNow = _startDate + _timer.Elapsed;
NowOffset = new NtpClient().GetLocalTime(TimeZoneInfo.Local, timeout).Subtract(dtNow);
 
  Я так понимаю, смысл в том, чтобы повысить точность передаваемого dtNow, а не добавление миллисекунд (DateTime.Now имеет точность до наносекунд, другое дело, что его время вычисления дискретно)?
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					VassilSanych 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			Mikhail Sukhov Я так понимаю, смысл в том, чтобы повысить точность передаваемого dtNow, а не добавление миллисекунд (DateTime.Now имеет точность до наносекунд, другое дело, что его время вычисления дискретно)?  Смысл в реализации Now. Остальное всё - следствия и частности. DateTime.Now при частом вызове просто возвращает прошлые значения.  Погрешность DateTime.Now при этом составляет десятки миллисекунд. Это не позволяет видеть время выполнения операций в логе, не запуская лишний раз профайлер. Ну и просто лог выглядит глупо :)
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			VassilSanych Это не позволяет видеть время выполнения операций в логе, не запуская лишний раз профайлер.  А причем тут лог? Был переделан метод, синхронизирующий время с атомными часами.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					VassilSanych 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			Mikhail Sukhov А причем тут лог? Был переделан метод, синхронизирующий время с атомными часами.  Как я написал, целью было изменить LoggingHelper.Now Которое используется практически везде. В частности в логах. Синхронизация времени просто приведена в соответствие с новой логикой вычисления LoggingHelper.Now.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			VassilSanych  Как я написал, целью было изменить LoggingHelper.Now
 
  Да, теперь понятно. Интересно, насколько перфоманс изменился.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					VassilSanych 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			Я думал, что перфоманс моего вызова будет хуже, но не значительно, но оказалось: На 10000 вызовов - DateTime.Now + NowOffset = 0.0892 с - LoggingHelper.Now = 0,0002399 с
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					VassilSanych 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			А нет. Это наводки от прекомпиляции. Одинаковый перфоманс.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			VassilSanych А нет. Это наводки от прекомпиляции. Одинаковый перфоманс.  _startDate = DateTime.Now; _timer.Start(); Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тянуться в течении всей жизни приложения.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					VassilSanych 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			Mikhail Sukhov Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тянуться в течении всей жизни приложения.  10000000 запусков в цикле - 1.12 с Можно считать, нет погрешности.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 17.02.2013
					
					
			
					 
					 
					
	
			VassilSanych Mikhail Sukhov Между определением Now и замером Start может пройти некоторое время. Эта погрешность будет потом тянуться в течении всей жизни приложения.  10000000 запусков в цикле - 1.12 с Можно считать, нет погрешности.  Дело в не скорости исполнения, а в том, что в отличие от StopWatch, DateTime.Now - это недетерминированная операция. Тоесть время может быть и практически мгновенным, а может и залипнуть на пару секунд. Это все зависит от текущей загруженности компьютера. StopWatch же гарантирует кол-во тактов, за которое может быть выполнена операция.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 |