Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每秒创建一个新字符串-使用string.Format还是StringBuilder?_C#_Wpf_Stopwatch_String.format - Fatal编程技术网

C# 每秒创建一个新字符串-使用string.Format还是StringBuilder?

C# 每秒创建一个新字符串-使用string.Format还是StringBuilder?,c#,wpf,stopwatch,string.format,C#,Wpf,Stopwatch,String.format,所以我有一节课: public class ElapsedTime: BaseObservableObject { public static event PropertyChangedEventHandler StaticPropertyChanged; private static Stopwatch _stopWatch; private static string _value; public static Stopwatch StopWatch

所以我有一节课:

public class ElapsedTime: BaseObservableObject
{
    public static event PropertyChangedEventHandler StaticPropertyChanged;
    private static Stopwatch _stopWatch;
    private static string _value;

    public static Stopwatch StopWatch
    {
        get { return _stopWatch; }
        set
        {
            _stopWatch = value;
        }
    }

    public static string Value
    {
        get { return _value; }
        set
        {
            _value = value;
            OnStaticPropertyChanged("Value");
        }
    }

    private static void OnStaticPropertyChanged(string propertyName)
    {
        StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
    }
}
更新我的
Lebel

private void UpdateElapsedTime()
{
    string str = string.Format("{0:00}:{1:00}:{2:00}:{3:00}",
        ElapsedTime.StopWatch.Elapsed.Days,
        ElapsedTime.StopWatch.Elapsed.Hours,
        ElapsedTime.StopWatch.Elapsed.Minutes,
        ElapsedTime.StopWatch.Elapsed.Seconds);
    lblEl.content = str;
}

它是否在每次调用(每一秒)时分配新内存,使用
StringBuilder
更好?

使用接受格式字符串参数的ToString重载。每秒1个ToString调用在资源方面非常便宜

private void UpdateElapsedTime()
{
    lblEl.content = ElapsedTime.StopWatch.Elapsed.ToString(@"dd\:hh\:mm\:ss");
}

String.builder适用于多次循环向已有内容添加字符串的情况。你每次都要创建一个新的字符串,并且只将几个字符串粘在一起,所以不值得这么做。它甚至可能有更高的开销,因为创建stringbuilder本身比创建字符串更昂贵

现在设置4个变量的格式和设置一个字符串格式之间的区别就像一纳秒,所以如果您觉得这样更清晰,我就不用担心了。 在桌面应用程序中,代码的清晰性通常比效率更重要

我之所以发布答案而不是评论,是因为字符串插值比变量编号的格式更容易使用。 总而言之。 在这种特定情况下,“一种格式”要优雅得多,因此此选项并不适合您的特定用途。 不过我想指出字符串插值是存在的。

这看起来像:

lblEl.content = $"{ElapsedTime.StopWatch.Elapsed.Days:00}:{ElapsedTime.StopWatch.Elapsed.Hours:00}:{ElapsedTime.StopWatch.Elapsed.Minutes:00}:{ElapsedTime.StopWatch.Elapsed.Seconds:00}";
当我想看到一堆变量,而仅仅是一个断点和快速观察是不现实的时候,我经常在调试中使用它


请注意,您可以通过添加“:”来包含格式然后是变量后的常用格式字符串。

每秒创建一个字符串没有什么好担心的。我的代码和您在这里发布的代码有什么不同?顺便说一句,现在我的标签看起来像0:0:0:0,而不是00:00:00,这正是我想要的。我编辑了我的帖子,展示了如何使用字符串插值设置字符串格式。在这种情况下,Ash的建议更简单。每次访问StopWatch.appead时,您都会得到新的值。访问它4次->4个不同的结果你是对的。我认为对于他的特定目的来说,一种格式是更好的解决方案。但是从一天、一小时、一分、一秒到一秒,只需不到一秒的时间。可能不到一毫秒。对于OP的特定用途,这是一个更简单的解决方案。我打算在我的帖子中解释字符串插值。