相关疑难解决方法(0)

衡量代码执行时间的最佳方法是什么?

我正在尝试确定删除字符串的方法是最快的.

我只是得到开始结束时间并显示差异.

但结果是如此多变,例如如下所示,相同的方法可以从60毫秒到231毫秒.

获得更准确结果的更好方法是什么?

替代文字http://www.deviantsart.com/upload/1q4t3rl.png

using System;
using System.Collections;
using System.Collections.Generic;

namespace TestRemoveFast
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int j = 0; j < 10; j++)
            {
                string newone = "";
                List<string> tests = new List<string>();
                for (int i = 0; i < 100000; i++)
                {
                    tests.Add("{http://company.com/Services/Types}ModifiedAt");
                }

                DateTime start = DateTime.Now;
                foreach (var test in tests)
                {
                    //newone = ((System.Xml.Linq.XName)"{http://company.com/Services/Types}ModifiedAt").LocalName;
                    newone = Clean(test);
                }

                Console.WriteLine(newone);
                DateTime …
Run Code Online (Sandbox Code Playgroud)

c# performance

42
推荐指数
3
解决办法
6万
查看次数

DateTime.Now多久更新一次?或者是否有更精确的API来获取当前时间?

我有一个循环运行的代码,它根据当前时间保存状态.有时这可能只相差几毫秒,但由于某些原因,似乎DateTime.Now将始终返回至少10 ms的值,即使它仅在2或3 ms之后.这是一个主要问题,因为我保存的状态取决于它保存的时间(例如录制内容)

我的测试代码返回10 ms的每个值:

public static void Main()
{
    var dt1 = DateTime.Now;
    System.Threading.Thread.Sleep(2);
    var dt2 = DateTime.Now;

    // On my machine the values will be at least 10 ms apart
    Console.WriteLine("First: {0}, Second: {1}", dt1.Millisecond, dt2.Millisecond);
}
Run Code Online (Sandbox Code Playgroud)

是否有另一种解决方案可以获得精确的当前时间到毫秒?

有人建议看秒表类.虽然秒表类是非常准确的,但它并没有告诉我当前的时间,我需要的东西是为了保存程序的状态.

.net c# datetime real-time

25
推荐指数
3
解决办法
1万
查看次数

Enterprise Library 4.1记录时间戳如何显示毫秒

以下是配置文件.

 <formatters>
      <add template="{timestamp} {severity} {category} {message}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        name="SingleLineFormatter" />
 </formatters>
Run Code Online (Sandbox Code Playgroud)

哪个显示

31/05/2011 11:43:24信息......

但是没有毫秒显示哪些对于穿孔仪器有用,谁知道如何显示?谢谢.

logging enterprise-library app-config

10
推荐指数
1
解决办法
8709
查看次数

DateTime精度?

(忽略优化的编译器标志)

是不是这个代码会进入某些系统的块?

if (Datetime.Now!=Datetime.Now)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,它如何评估这里的价值观?(按顺序)?

有什么情况可能是真的吗?

再次,忽略优化标志.

.net c# datetime

9
推荐指数
2
解决办法
1435
查看次数

为什么timepan totalmilliseconds在整数和小数部分中具有相同的数字?

当计算两个DateTime对象之间的毫秒差异时,我似乎总是得到一个返回的数字,其中数字的小数部分与数字的整数分量相同.例如:1235.1235

为什么会这样?难道我做错了什么?这是语言的怪癖还是DateTime粒度的限制或其他什么?

这可以使用以下代码演示:

        DateTime then = DateTime.Now;
        Thread.Sleep(1234);
        DateTime now = DateTime.Now;
        TimeSpan taken = now - then;
        string result = taken.TotalMilliseconds.ToString(CultureInfo.InvariantCulture);
        //result = "1235.1235"
Run Code Online (Sandbox Code Playgroud)

由CodesInChaos评论:

DateTime`不准确到这个精度级别:参见C#DateTime.Now precision

但是 - 这并不能解释这种行为.

c# datetime timespan

9
推荐指数
1
解决办法
1820
查看次数

如何在C#中获得精确的DateTime

我知道它DateTime.UtcNow没有相对较高的精度(10-15 ms分辨率).

这对我来说是一个问题,因为在我的日志文件中,我想要更好的解决方案来解决竞争条件.

问题是:如何以比DateTime.UtcNow提供的更精确的方式获得当前日期/时间?

到目前为止,我见过的唯一解决方案是:https://stackoverflow.com/a/15008836/270348.这是解决问题的合适方法吗?

c# datetime

6
推荐指数
2
解决办法
1132
查看次数

XNA计时如何工作?

XNA如何保持一致且精确的60 FPS帧速率?此外,如何在不将CPU固定在100%的情况下保持如此精确的时序?

c# xna

5
推荐指数
1
解决办法
5122
查看次数

DateTime.Ticks 没有 100 ns 的分辨率?

可能的重复:
C# DateTime.Now 精度

关于 .NET 中的高分辨率计时,有一些关于 SO 的问题,其中声明(如 MSDN 文档中所述)DateTime.Ticks 的结果为 100 纳秒。

但在现实生活中似乎完全不是这样。如果我运行下面的代码,我希望它生成行,其中每一行的 Tick 值都不同,其中很多行具有相同的毫秒值。但事实并非如此 - 滴答值保持不变,直到下一次毫秒值的变化,不会增加时间戳的分辨率。

private static List<string> GetTimeLine(long iterations)
{
    List<string> liste = new List<string>();
    for (long i = 0; i <= iterations; i++)
    {
        liste.Add(DateTime.Now.Millisecond.ToString() + " - " + DateTime.Now.Ticks.ToString());
    }

    return liste;
}

static void Main(string[] args)
{
    Console.WriteLine("Generating timeline");
    guids = GetTimeLine(10000);
    File.WriteAllLines(@"C:\Test\GUIDS.TXT", guids);
    Console.WriteLine("File written - Press ENTER");
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

结果输出示例:

...
867 - 634940160118679615

867 - 634940160118679615

867 - …

.net c# visual-studio-2012

5
推荐指数
1
解决办法
8061
查看次数

Thread.Sleep()确保DateTime.Now不同的最短时间是多少?

Thread.Sleep()确保DateTime.Now不同的最短时间是多少?

鉴于DateTime具有Ticks属性,您可以认为以下内容就足够了:

Thread.Sleep(TimeSpan.FromTicks(1));
Run Code Online (Sandbox Code Playgroud)

这样可以,但是这可以保证后续调用DateTime.Now不相等?

更新:出现DateTime精度是硬件相关的,所以我将使用以下方法:

public static void SleepUntilDateTimeChanges()
    {
        DateTime now = DateTime.Now;
        while(now == DateTime.Now)
            Thread.Sleep(TimeSpan.FromMilliseconds(1));
    }
Run Code Online (Sandbox Code Playgroud)

c# datetime

3
推荐指数
1
解决办法
2877
查看次数

DateTime.Now.Millisecond 的分辨率在不同的计算机上有所不同

我有一个用C#,VS 2005编写的程序。它具有记录数据和时间戳的功能。我需要毫秒级的时间分辨率,因为数据采样周期时间可能为 50 毫秒或更短。我使用DateTime.Now.Millisecond来检索系统时间,但我发现在某些计算机上,两个时间戳之间的实际间隔不是50ms而是62-63ms。

所以我简化了我的代码并在几台计算机上进行了尝试,代码如下:

static void Main(string[] args)
{
    while (true)
    {
        Thread.Sleep(50);
        Console.WriteLine("{0}", DateTime.Now.Millisecond);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 Win7 SP1 上的结果:

928 991 53 116 178 240 306 368 431 493 555 618 ...

请注意,间隔约为 62-63ms。

我知道Windows NT系列操作系统的时间分辨率约为16ms,所以我对结果并不感到非常惊讶。

但是,问题是,当我在其他一些 Win7(SP1) 计算机上测试相同的程序时,结果是准确的,并且间隔几乎总是 50ms,我不知道为什么行为差异如此之大。

所以,我的问题是:

  1. 如何解释这些结果?
  2. 如何获得准确的毫秒级时间戳?可以吗(Win7)?

顺便提一句,

1)我在Win10上测试,间隔约为50-51ms。

2)我尝试使用秒表,但没有效果。

3)Environment.TickCount也不准确。

4)我尝试使用VS 2015,结果相同。

=========================================

这是我的新测试代码:

static void Main(string[] args)
{
    long ticks = DateTime.Now.Ticks;
    int tEV = Environment.TickCount;
    while (true)
    {
        Thread.Sleep(50);
        Console.WriteLine("{0}, {1}, {2}",
            DateTime.Now.Ticks - ticks,
            DateTime.Now.Millisecond,
            Environment.TickCount - …
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
925
查看次数

当TimeSpan小于~0.5ms时,TimeSpan.TotalMilliseconds为0

我正在为一个应用程序实现一些诊断,用户可以看到图形更新的速度,我遇到了一些看似奇怪的行为.我的图形更新功能是使用Timer调用的,它看起来像这样:

private void RefreshScreen(object sender, EventArgs e)
{
    DateTime begin = DateTime.Now;

    // Do some updating...

    DateTime end = DateTime.Now;
    graphicsUpdateRate = (end - begin).TotalMilliseconds;
}
Run Code Online (Sandbox Code Playgroud)

当我稍后在另一个函数中将graphicsUpdateRate显示到一个单独的窗口时,它几乎总是为0.偶尔它实际上会是~0.5,但我从未在低于0.48的情况下看到它.有什么理由为什么如果它低于这个会将它钳制到0?使用TimeSpan.TotalMilliseconds时有什么我想念的吗?我对此感到困惑,因为它似乎是随机的.

c# wpf

0
推荐指数
1
解决办法
163
查看次数