C#foreach内存缓存和字符串内存优化

Har*_*Har 1 c#

foreach (string sn in MACOrSerial.Split(','))
{
    MACOrSerial = sn.Trim();   
}
Run Code Online (Sandbox Code Playgroud)

MACORSerial包含以逗号分隔的一串文本(EX.AA123241,BB123431,CC1231243).我抓住一个子串并将其放入相同的MACORSerial中.

这不会给我带来任何问题,因为foreach仍将使用内存中的原始 MACOrSerial.

虽然我认为这是最节省内存的方法,但它是否正确或者我应该使用新名称制作另一个字符串,例如

MacORSerialSubString = sn.Trim()?
Run Code Online (Sandbox Code Playgroud)

我没有任何记忆问题.我只是想确保我的代码干净简洁.

Ode*_*ded 8

你的假设是不正确的-环越过string[]从产生Split-这些都是新的字符串实例.

您不是通过将字符串重新分配给原始变量来保存任何内存,而是通过重用变量而失去可读性.

这是一种更具可读性的方法,它使用了一些内置功能:

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

foreach (string sn in serialNumbers)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

  • @HarHaHu:如果你有性能问题,**测量**然后你就会知道.首先,设置性能目标,以便了解可接受和不可接受的性能.然后针对目标衡量您的计划.如果可以接受**请勿修理; 它没有被破坏.**如果它是不可接受的那么*得到一个分析器*,*运行探查器*,*找到最慢的东西*并*修复*.分配这个字符串所需的几微秒不太可能成为真正的问题,所以*不要浪费时间思考如何解决非问题.*花时间追踪并修复*真正的*问题. (3认同)