我定期以毫秒为单位获取新的时间值,并且需要采用" 00h 00m 00s"这样的形式,因此考虑使用 TimeSpan ,因为它'很简单易用。
TimeSpan t = TimeSpan.FromMilliseconds(timeValue);
但我现在担心的是GC。我不认为每次调用 FromMilliseconds()都是个好主意,因为它似乎始终会创建一个新实例。 我需要每0.1秒左右更新一次时间值,所以如果有办法直接修改TimeSpan对象的值,它对我的情况非常有用。否则,我想我需要自己创建一个方法..
有可能吗?
答案 0 :(得分:2)
TimeSpan
是不可变的。
如果要更改其值,则必须创建新的TimeSpan
实例。从docs可以看出,所有属性都是get-only。
但不要担心GC!当您遇到性能问题时,只会担心它。我认为TimeSpan
占据的空间很小。
答案 1 :(得分:2)
...所以,如果有办法直接修改
TimeSpan
对象的值,它对我的情况非常有用。 ...有可能吗?
不,无法修改TimeSpan
的实例,它是不可变的struct
。
否则,我认为我需要自己创建一个方法..
你很可能不。您是否绝对确定现有TimeSpan
的性能含义对您的应用程序真正重要?您是否已分析应用程序以验证创建TimeSpan
的新实例是否会导致性能问题。即使那个的情况(不太可能),你确定你的自己的代码会更好吗? .NET框架旨在被广泛使用;虽然它并不完美,但通常都很好。
答案 2 :(得分:0)
将其视为更改int
的值。如果你这样做
int x;
x = 5;
x++;
您永远不会更改int
的值。您正在更改x
的值。
这听起来像是分裂头发,但听起来你想要做的就是更改包含TimeSpan
的变量的值,而不是更改实际的TimeSpan
。
这可能有多种形式,但是,你可以做到。它看起来非常类似于修改整数变量。
var t = new TimeSpan(1,0,0); // One day
t += TimeSpan.FromMinutes(1); // Add one minute