每秒创建新字符串 - 使用String.Format或StringBuilder



所以我有这个类:

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 Ordroad接受格式字符串参数。每秒1个totring呼叫在资源方面非常便宜

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

string.builder是为了循环多次在已经拥有的东西中添加字符串时。您每次都会创建一个新的字符串,只插入几个字符串,因此不值得付出努力。它甚至可能具有更高的开销,因为StringBuilder本身的创建比字符串更昂贵。

与您现在的格式化4个变量和一种字符串格式之间的区别一样,就像纳米秒一样,因此,如果您觉得它更清楚,我就不会担心。代码的清晰度通常比桌面应用中的效率更重要。

为什么我要发布答案而不是评论是因为字符串插值比使用编号变量的格式更容易使用。一般来说,无论如何。在这种特定情况下,一种格式要优雅得多,因此此选项并不适合您的特定目的。我想指出的是字符串插值存在。https://learn.microsoft.com/en-gb/dotnet/csharp/language-reference/tokens/tokens/interpolated

看起来像:

lblEl.content = $"{ElapsedTime.StopWatch.Elapsed.Days:00}:{ElapsedTime.StopWatch.Elapsed.Hours:00}:{ElapsedTime.StopWatch.Elapsed.Minutes:00}:{ElapsedTime.StopWatch.Elapsed.Seconds:00}";

当我想看到一堆变量时,我通常会在调试中使用此功能,而只是一个断开点和快速观察是不切实际的。

请注意,您可以通过附加":"以及变量后的常规格式字符串来包含格式。

相关内容

  • 没有找到相关文章

最新更新