我們有一個要求,包含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