C# 编辑Web配置文件并应用更改
我正在用c#编写一个windows应用程序,我在其中读取文件夹中的web.config文件,并加载应用程序设置,用户可以在其中编辑它们并应用更改 我将设置“key”和“value”存储在一个字典中,并将受影响的值存储在一个单独的字典中。它工作得很好,但应用更改需要很多时间 我怎样才能加快速度 这是我的密码C# 编辑Web配置文件并应用更改,c#,windows,dictionary,C#,Windows,Dictionary,我正在用c#编写一个windows应用程序,我在其中读取文件夹中的web.config文件,并加载应用程序设置,用户可以在其中编辑它们并应用更改 我将设置“key”和“value”存储在一个字典中,并将受影响的值存储在一个单独的字典中。它工作得很好,但应用更改需要很多时间 我怎样才能加快速度 这是我的密码 public List<AppSettings> OldAppSetting; public List<AppSettings> NewAppSetting;
public List<AppSettings> OldAppSetting;
public List<AppSettings> NewAppSetting;
foreach (var oldSetList in OldAppSetting)
{
Document = Document = XDocument.Load(@oldSetList.FilePathProp);
var appSetting = Document.Descendants("add").Select(add => new
{
Key = add.Attribute("key"),
Value = add.Attribute("value")
}).ToArray();
foreach (var oldSet in appSetting)
{
foreach (var newSet in NewAppSetting)
{
if (oldSet.Key != null)
{
if (oldSet.Key.Value == newSet.AppKey)
{
oldSet.Value.Value = newSet.AppValue;
}
}
Document.Save(@oldSetList.FilePathProp);
}
}
}
我认为您主要关心的速度问题是在检查每个项目后保存文档。似乎可以更改代码以减少调用save的次数。例如:
foreach (var oldSetList in OldAppSetting)
{
Document = Document = XDocument.Load(@oldSetList.FilePathProp);
var appSetting = Document.Descendants("add").Select(add => new
{
Key = add.Attribute("key"),
Value = add.Attribute("value")
}).ToArray();
foreach (var oldSet in appSetting)
{
foreach (var newSet in NewAppSetting)
{
if (oldSet.Key != null)
{
if (oldSet.Key.Value == newSet.AppKey)
{
oldSet.Value.Value = newSet.AppValue;
}
}
}
}
Document.Save(@oldSetList.FilePathProp);
}
此外,您可以使用字典而不是数组来设置应用程序。如果物品的数量很大,这将大大加快速度。这需要对代码进行一些重构。我不知道您所有的类型都是什么,所以我无法给出确切的代码,但它看起来像这样:
var appSetting = Document.Descendants("add")
.ToDictionary(add => add.Attribute("key"));
foreach (var newSet in NewAppSetting)
{
if (appSetting.ContainsKey(newSet.AppKey))
{
var oldSet = appSetting[newSet.AppKey];
oldSet.Value.Value = newSet.AppValue;
}
}
你的代码有点混乱,但我认为这是对的。这里的想法是建立一个旧值字典,这样我们可以在扫描新值时直接查找它们。它将您的O(n^2)算法转换为O(n)算法,如果有很多设置,这将产生不同。另外,代码更小,更容易理解。将
Document.Save(@oldSetList.FilePathProp);
圈外 什么是您的文档。保存(@oldSetList.FilePathProp)
?appSetting
和NewAppSetting
的类型是什么?为什么对oldSetList
使用关键字转义?什么是appSetting
和NewAppSetting
?将更改保存为document@IcappSettings是1 web配置文件中的旧appSettings,而newappsettings包含它们所做的更改。@Sajeetharan我们需要这些变量的类型<代码>词典
<代码>XML文档
?
Document.Save(@oldSetList.FilePathProp);