2012-03-22 8 views
1
foreach (string sn in MACOrSerial.Split(',')) 
{ 
    MACOrSerial = sn.Trim(); 
} 

MACORSerialには、カンマで区切られたテキスト文字列(例:AA123241、BB123431、CC1231243)が含まれています。 私は1つの部分文字列をつかみ、それを同じMACORSerialに置きます。C#foreachメモリキャッシュと文字列メモリの最適化

foreachがまだオリジナルの MACOrSerialをメモリに使用しているため、これで問題は発生しません。

私はこれが最もメモリ効率的なアプローチだと思うが、それは正しいですか、私はちょうど私が任意のメモリの問題を持っていないです、このような

MacORSerialSubString = sn.Trim()? 

などの新しい名前を持つ別の文字列を作成する必要があります。私はちょうど私のコードがきれいで簡潔であることを確認したい。

+2

これで解決しようとしている実際のメモリに問題がありますか? – Oded

+0

Odedが正しいです。実際に顧客の苦痛を引き起こしている実際の問題を解決するためにあなたの時間を費やしてください。すべての変数が明確に理解できる目的を持っているように、あなたのコードを書いて、あなたが何らかの形でメモリの使用を "最適化"するようにしてください。 –

+1

私はこのコードを約5回読まなければなりませんでした。それは判読不能で、あなたが持っている知覚された記憶の問題のどれにも対処しない可能性があります。 – RQDQ

答えて

8

あなたの仮定が間違っている - ループはSplit起因するstring[]乗り越えて - これらはすべて新しい文字列のインスタンスです。

文字列を元の変数に再割り当てしてもメモリを保存しておらず、変数の再利用によって可読性が失われています。あなたが掲載され

string[] serialNumbers = MACOrSerial.Split(new [] {',', ' ', '\r', '\n' }, 
            StringSplitOptions.RemoveEmptyEntries); 

foreach (string sn in serialNumbers) 
{ 
    // do stuff 
} 
+0

+1ありがとうございます。確かに.00001秒ではありませんか?新しい文字列の割り当てですか? – Har

+0

@HarHaHu - あなたが何百万というレコードを扱っていない限り、これは意味をなさないでしょう。 – Oded

+0

素晴らしいと包括的な答え!ありがとう。 – Har

2

あなたのコードがより明確になるように新しい変数を作成します。メモリに目立つ影響はありません。

+0

true - ありがとう! +1 – Har

4

マイ$ .02-コード、それはで壊れるので、極めて非直感的なされています。ここでは

は、より読みやすいと能力に建てられたのいくつかを使用する一つのアプローチであります期待されるパターン。

IMHO特に他の人が指摘しているように、他の開発者が一目で理解できるように(実際には/試行する)メモリを最適化する方法でコードを書くことが重要ですマイクロ最適化は、実際に使用されるメモリの量を削減しません。

+0

+1あなたの誠実さに感謝 – Har

+0

確かに。私自身の答えを詰め込むのではなく、.NETが文字列を扱う方法についての良い参考文献となるものを読むこともできます:http://stackoverflow.com/questions/9132338/how-many-string-objects-will-使用中のプラス記号/ 9132374#9132374を作成してください。特に、連結ループに関する最後のビットです。 –

1

コードをわかりやすくするために、別の変数を使用することをお勧めします。プラス私は、フロントまで空の文字列を削除します:

foreach (string sn in MACOrSerial.Split(',', StringSplitOptions.RemoveEmptyEntries)) 
{ 
    string MacORSerialSubString = sn.Trim(); 
} 
+0

素晴らしいオプションありがとう! – Har

1

は現実には、あなたの反復はMACOrSeriaリットル変数から独立した配列であるMACOrSerial.Split()呼び出し、その結果を使用することになります。

​​が呼び出されるたびに、MACOrSerialまたは別の文字列変数を使用する場合との違いはありません。新しい文字列が生成され、文字列変数に配置されます。

関連する問題