Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# 是否有方法更改TimeSpan对象的值?_C# - Fatal编程技术网

C# 是否有方法更改TimeSpan对象的值?

C# 是否有方法更改TimeSpan对象的值?,c#,C#,我定期得到以毫秒为单位的新时间值,需要它的格式为00h 00m 00s,所以考虑使用TimeSpan,因为它使用起来非常简单 TimeSpan t=TimeSpan.From毫秒估计值 但我现在担心的是GC。我不认为每次调用FromMiscles是个好主意,因为它似乎总是创建一个新实例。 我需要每隔0.1秒左右更新一次时间值,因此如果有一种方法可以直接修改TimeSpan对象的值,它对我的情况非常有用。否则,我想我需要自己创建一个方法 可能吗?时间跨度是不可变的 如果要更改其值,必须创建新的Ti

我定期得到以毫秒为单位的新时间值,需要它的格式为00h 00m 00s,所以考虑使用TimeSpan,因为它使用起来非常简单

TimeSpan t=TimeSpan.From毫秒估计值

但我现在担心的是GC。我不认为每次调用FromMiscles是个好主意,因为它似乎总是创建一个新实例。 我需要每隔0.1秒左右更新一次时间值,因此如果有一种方法可以直接修改TimeSpan对象的值,它对我的情况非常有用。否则,我想我需要自己创建一个方法

可能吗?

时间跨度是不可变的

如果要更改其值,必须创建新的TimeSpan实例。从中可以看到,所有属性都是get only

但是不要担心GC!只有在实际遇到性能问题时才需要担心。我认为时间跨度占用的空间很小。

时间跨度是不可变的

如果要更改其值,必须创建新的TimeSpan实例。从中可以看到,所有属性都是get only

但是不要担心GC!只有在实际遇到性能问题时才需要担心。我认为时间跨度占用的空间非常小

…因此,如果有一种方法可以直接修改TimeSpan对象的值,它对我的情况非常有用

可能吗

不,不可能修改TimeSpan的实例,它是一个不可变的结构

否则,我想我需要自己创建一个方法

很可能你真的没有。您是否绝对确定现有时间跨度的性能影响对您的应用程序真正重要?您是否分析了应用程序以验证创建TimeSpan的新实例是否会导致性能问题。即使这种情况不太可能发生,你确定你自己的代码会更好吗?NET框架旨在广泛使用;虽然它并不完美,但通常都很好

…因此,如果有一种方法可以直接修改TimeSpan对象的值,它对我的情况非常有用

可能吗

不,不可能修改TimeSpan的实例,它是一个不可变的结构

否则,我想我需要自己创建一个方法


很可能你真的没有。您是否绝对确定现有时间跨度的性能影响对您的应用程序真正重要?您是否分析了应用程序以验证创建TimeSpan的新实例是否会导致性能问题。即使这种情况不太可能发生,你确定你自己的代码会更好吗?NET框架旨在广泛使用;虽然它不是完美的,但通常是相当好的。

将其视为更改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

把它想象成改变一个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

TimeSpan是不可变的,因此每次都需要一个新的TimeSpan。TimeSpan是结构值类型。它将被放在堆栈上。@AlexanderPetrov值类型并不总是放在堆栈上。如果您担心速度,请测试和测量。不guess@Jenixtimespan是一个结构,它封装了一个长值。没别的了。即使你能改变它,你最终还是会复制long。没有GC involvedTimeSpan是不可变的,因此每次都需要一个新的。TimeSpan是结构值类型。它将被放在堆栈上。@AlexanderPetrov值类型并不总是放在堆栈上。如果您担心速度,请测试和测量。不guess@Jenixtimespan是一个结构,它封装了一个长值。没别的了。即使你能改变它,你最终还是会复制long。实际上没有涉及GC,它包装了一个长的ticks值。尝试修改ie替换该值将使用与替换时间相同的空间。实际上,它包含一个较长的刻度值。尝试修改ie替换该值将使用与替换TimeSpant相同的空间问题是,FromMinutes将返回一个新实例,因此最终的开销大致相同。除此之外,我真的很感激+=运算符的事情。它在某些情况下可能有用。
谢谢问题是,FromMinutes将返回一个新实例,因此最终的开销大致相同。除此之外,我真的很感激+=运算符的事情。它在某些情况下可能有用。谢谢谢谢顺便说一句,我的意思是,创建一个直接创建结果字符串的方法,而不是一个TimeSpan-ish的东西,所以这并不是要编写一个比.NET framework更好的方法,而是要为我的特定情况创建一个方法。正如您所提到的,TimeSpan将被广泛使用,这意味着有时它会感觉太多或太重。我的应用程序已经有太多的开销,所以这就是为什么我担心GC。在我的游戏中,稍微增加一点会导致更多的帧丢失,这真的很重要。当然,正如你所说,我需要将两者进行比较。你永远不会明白我在说什么。。我需要的只是每隔0.1秒使用一个MM:SS字符串,而不是时间跨度或任何类似的时间相关对象。在这种情况下,我一开始可能会这么想,特别是当您坚持TimeSpan不会一直放在堆栈上时。我必须从TimeSpan中的一个新字符串创建,所以我计划从一开始就创建这个字符串。在这种情况下,为什么要创建具有long的对象?这就是为什么我说它可能感觉很重。你也知道很多字符串对象本身已经可以导致GC。是的,我是TimeSpan的新手,它看起来非常方便,所以我需要检查它是否适合我的情况。你一直说我想创造一个新的时间跨度。谢谢!顺便说一句,我的意思是,创建一个直接创建结果字符串的方法,而不是一个TimeSpan-ish的东西,所以这并不是要编写一个比.NET framework更好的方法,而是要为我的特定情况创建一个方法。正如您所提到的,TimeSpan将被广泛使用,这意味着有时它会感觉太多或太重。我的应用程序已经有太多的开销,所以这就是为什么我担心GC。在我的游戏中,稍微增加一点会导致更多的帧丢失,这真的很重要。当然,正如你所说,我需要将两者进行比较。你永远不会明白我在说什么。。我需要的只是每隔0.1秒使用一个MM:SS字符串,而不是时间跨度或任何类似的时间相关对象。在这种情况下,我一开始可能会这么想,特别是当您坚持TimeSpan不会一直放在堆栈上时。我必须从TimeSpan中的一个新字符串创建,所以我计划从一开始就创建这个字符串。在这种情况下,为什么要创建具有long的对象?这就是为什么我说它可能感觉很重。你也知道很多字符串对象本身已经可以导致GC。是的,我是TimeSpan的新手,它看起来非常方便,所以我需要检查它是否适合我的情况。你一直说我想创造一个新的时间跨度。