Да, тот код является абсолютно избыточным и ненужным, и он не заставляет сборщик "мусора" сделать что-либо, что он иначе не сделал бы (после того как экземпляр MyCollection выходит из объема, который является.) Особенно .Clear()
вызовы.
Ответ на Ваше редактирование: Вид. Если я делаю это:
public void WasteMemory()
{
var instance = new MyCollection(); // this one has no Dispose() method
instance.FillItWithAMillionStrings();
}
// 1 million strings are in memory, but marked for reclamation by the GC
Это функционально идентично этому в целях управления памятью:
public void WasteMemory()
{
var instance = new MyCollection(); // this one has your Dispose()
instance.FillItWithAMillionStrings();
instance.Dispose();
}
// 1 million strings are in memory, but marked for reclamation by the GC
, Если действительно действительно действительно необходимо освободить память это очень мгновенное, звоните GC.Collect()
. Нет никакой причины сделать это здесь, все же. Память будет освобождена, когда она будет необходима.
Не проверено, но есть ли у вас попробовал:
<TextBlock Text="{Binding Path=PercentageComplete,
Converter={StaticResource NumberFormatter},
ConverterParameter="0.00 '%"}" />
Вы можете использовать String.Format вместо Double.ToString
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) {
string format = (string) parameter;
return String.Format( format, value );
}
А в выражении привязки используйте специальную escape-последовательность {}:
<TextBlock Text="{Binding PercentageComplete, Converter={StaticResource NumberFormatter}, ConverterParameter='{}{0:0.00} %'}"></TextBlock>
Вот обходной путь, позволяющий избежать расширения разметки, хотя это не прямой ответ на вопрос.
<TextBlock>
<TextBlock.Text>
<Binding Path="PercentageComplete"
Converter="{StaticResource NumberFormatter}"
ConverterParameter="0.00 '%" />
</TextBlock.Text>
</TextBlock>