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的特定用途,这是一个更简单的解决方案。我打算在我的帖子中解释字符串插值。