我们有一个要求,包含dd/mm/yyyy
格式的日期的字符串转换为ddmmyyyy
格式(如果你想知道为什么我存储日期字符串中,我的软件处理大宗交易的文件,这是一个基于行的文本文件格式由银行使用)。是否string.Replace(string,string)创建附加字符串?
目前我正在这样做:
足够string oldFormat = "01/01/2014";
string newFormat = oldFormat.Replace("/", "");
当然,这个转换"01/01/2014"
到"01012014"
。但我的问题是,替换发生在一个步骤,还是创建一个中间字符串(例如:"0101/2014"
或"01/012014"
)?
这也是为什么我问这个的原因:我处理事务文件大小不等,从几KB到几十兆
。到目前为止,我还没有出现性能/内存问题,因为我仍在测试非常小的文件。但是,当涉及到兆字节时,我不确定是否会遇到这些附加字符串的问题。我怀疑会是这样,因为string
s are immutable。有了数百万条记录,这些额外的内存消耗将大大增加。
我已经使用StringBuilder
S表示输出文件的创建。而且我也知道discarded strings will be garbage collected(在时间结束前的某个时间点)。我想知道是否有更好,更有效的方法来替换字符串中特定字符/子字符串的所有匹配项,而不会另外创建字符串。
你应该尝试使用Regex.Replace,并比较性能。我曾经从一个大小为1MB的文件中删除了不必要的NewLine字符,并且正则表达式有很大的不同(以分钟为单位......)虽然我必须执行条件替换和其他一些文本操作,所以我建议在这个确切的案例 – Arie 2014-10-10 12:06:52
我认为它只为一个整个Replace分配一个字符串。没有一个字符串用于每个事件的替换。 – 2014-10-10 12:08:09
'字符串ReplaceInternal'是外部实现的方法。我不认为我们能够知道发生了什么。 – 2014-10-10 12:12:09