2015-10-26 59 views
1

我看到人們在vs2015之前編寫了多行字符串時有這個技巧。這裏已經有問題和很好的答案。我的問題不是這是否可能,而是它有什麼影響?作爲XML的多行字符串

人做

Dim s As String = 
<a> 
    SELECT f1, f2, f3 
    FROM t1 
    WHERE f4 = 10 
</a>.Value 

它是可讀好的。沒有特殊處理,它不具有回程能力。但我懷疑,這是額外的處理在運行時間和字符串interning?

回答

2

肯定有一個開銷,但我不認爲這是多少:

有一個構造函數調用XElement與它相關的XName(通過從字符串隱式轉換),它的唯一內容是文本(字符串作爲對象)。 從我在reference source中可以看到的情況來看,ctor本身似乎並沒有做太多的工作;首先根據XNode測試內容類型,然後將字符串內部字段設置爲字符串。

Value屬性顯然是以相同的原理工作的。

該字符串似乎也被攔截,因爲在整體上調用String.IsInterned返回字符串而不是null。

而過去的表達式評估XElement不再被使用,因此它直接有資格被GC收集(可能在gen0中釋放)。因此,爲了得出結論,除非性能是至關重要的,否則我寧願不說真正擔心(但只有真正的分析可以說明開銷是來自那個還是其他地方)。

+0

是的,有一天我會計時:o)良好的研究。謝謝! –