2017-04-25 13 views
-1

私はミリ秒単位で新しい時間値を定期的に取得していますので、 "00h 00m 00s"のような形式で入力する必要があります。TimeSpanを使用することは非常に簡単です。TimeSpanオブジェクトの値を変更する方法はありますか?

TimeSpan t = TimeSpan.FromMilliseconds(timeValue);

しかし、私が今心配しているのはGCです。 FromMilliseconds()と呼び出すことは、毎回新しいインスタンスが作成されるように思われるので、毎回お勧めします。 私は0.1秒ごとに時間値を更新する必要があるので、TimeSpanオブジェクトの値を直接変更する方法があれば、私の場合には非常に便利です。そうでなければ、私は自分でメソッドを作成する必要があると思う。

それは可能ですか?

+5

「TimeSpan」は不変なので、毎回新しいものが必要です。 – DavidG

+2

'TimeSpan'は構造体(値型)です。それはスタックに置かれます。 –

+4

いいえ、不可能です。そしてあなたは、**(特定された)性能劣化が本当に重要である** **あるのですか? –

答えて

2

TimeSpanは不変です。

値を変更する場合は、新しいTimeSpanインスタンスを作成する必要があります。​​からわかるように、すべてのプロパティは取得専用です。

しかし、GCについて心配しないでください!実際にパフォーマンスに問題が発生した場合にのみ心配してください。 TimeSpanはかなりのスペースしか占めていないと思います。

+2

実際、それはダニの「長い」値をラップします。その値を変更(つまり置き換え)しようとすると、TimeSpanの代わりに同じスペースが使用されます –

+0

ありがとうございました! – Jenix

2

... TimeSpanオブジェクトの値を直接変更する方法がある場合は、私の場合には非常に便利です。 ...

可能でしょうか?

いいえ、TimeSpanのインスタンスを変更することはできません。変更不可能なstructです。

はそうでなければ、私はあなたが本当にをない可能性が高い

もっと..私は自分でメソッドを作成する必要があると思います。既存のTimeSpanのパフォーマンスへの影響がアプリケーションにとって本当に重要であることは絶対に確かですか? TimeSpanという新しいインスタンスを作成しているためにパフォーマンスの問題が発生していることを確認するためにアプリケーションをプロファイリングしましたか?そしての場合でも(おそらく)コードが良くなりますか? .NETフレームワークは広く使われることを意図しています。それは完璧ではありませんが、それは通常かなり良いです。

+0

ありがとう! BTWは、TimeSpan-ishではなく、結果の文字列を直接作成するメソッドを作成することを意味していたので、「.NETフレームワークよりも優れたメソッドをコーディングする」ことではなく、「特定のケースに対して作成する」ことです。そして、あなたが言及したように、TimeSpanは広く使用されることになります。つまり、それはあまりにも重い感じがします。私のアプリケーションはすでにオーバーヘッドがあまりにも大きいので、私はGCについて心配していました。少し増分すると、私のゲームでフレームドロップが増え、本当に問題になることがあります。もちろん、私はあなたが言ったように、両方を比較する必要があります。 – Jenix

+0

@Jenixあなたは 'TimeSpan'で間違った木を吠える可能性が高いです。他のコメントが言ったように、それはちょうど "長い"を包むので、 "重い"ではありません。 –

+0

私は何を言っているのか分かりません。私が必要とするのは、TimeSpanやそれに類するTime-relatedオブジェクトではなく、0.1秒ごとの "MM:SS"文字列です。この場合、特にTimeSpanが常にスタックに配置されないと主張しているときは、最初はそう思ったかもしれません。 TimeSpanの新しい文字列から作成する必要があるので、最初から文字列を作成する予定です。この場合、longを持つオブジェクトを作成するのはなぜですか?だから私はそれが "重い"と感じるかもしれないと言いました。また、多くの文字列オブジェクト自体が既にGCを引き起こす可能性があります。 – Jenix

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 
+0

問題はFromMinutes()が新しいインスタンスを返すため、最終的にはほぼ同じオーバーヘッドです。それ以外は+ =演算子のことについて本当に感謝しています。場合によっては役に立つかもしれません。ありがとう! – Jenix

関連する問題