使用Properties.Settings.Default
非常适合保存UI设置。
我可以直接从任何课程中获取它,但也可以使用它来设置所有内容
FontSize="{Binding Source={x:Static p:Settings.Default}, Path=MyFontSize, Mode=OneWay}"
我害怕做任何事都会让我的节目变慢。
这段代码大约需要500毫秒:
bool b;
for (int i = 0; i < 100000; i++)
b = Properties.Settings.Default.testbool;
我不知道这是什么类型的对象,但我希望有一种方法可以制作具有类似属性的东西,但更快,我可以在程序结束时将其保存到设置中。
答案 0 :(得分:2)
免责声明:我不建议您执行以下操作。
如果确实希望提高性能,则可以重定向Settings类的索引器以从字典中读取:
internal sealed partial class Settings
{
private bool _isLoaded = false;
Dictionary<string, object> _tempValues = new Dictionary<string,object>();
public override object this[string propertyName]
{
get
{
if (_isLoaded)
{
return _tempValues[propertyName];
}
else
{
return base[propertyName];
}
}
set
{
if (_isLoaded)
{
_tempValues[propertyName] = value;
}
else
{
base[propertyName] = value;
}
}
}
protected override void OnSettingsLoaded(object sender, System.Configuration.SettingsLoadedEventArgs e)
{
base.OnSettingsLoaded(sender, e);
_isLoaded = true;
foreach (SettingsProperty property in Properties)
{
_tempValues[property.Name] = base[property.Name];
}
}
protected override void OnSettingsSaving(object sender, System.ComponentModel.CancelEventArgs e)
{
foreach (SettingsProperty property in Properties)
{
base[property.Name] = _tempValues[property.Name];
}
base.OnSettingsSaving(sender, e);
}
}
基准代码:
static void Main(string[] args)
{
Stopwatch timer = new Stopwatch();
timer.Start();
bool c;
for (int i = 0; i < 1000000; i++)
{
c = Properties.Settings.Default.MyBool;
}
timer.Stop();
Console.WriteLine(timer.ElapsedMilliseconds);
Console.ReadLine();
}
之前的时间:1348毫秒
之后的时间:101毫秒