我需要加载2种类型的xml文档;一个拥有50个子女,另一个拥有50个和800个额外的子女。对于较小的文档,性能非常好,对于较大的文档可以接受,直到孩子的数量增加。 20k个孩子* 50个子孩子=表现优异,20k个孩子* 850个子孩子=表现缓慢。当他们不存在时,我将如何跳过寻找额外的后代?我最初的尝试让我认为我需要为小文档和大文档分别提供类,方法,视图模型和视图。以下是对我的代码的简要介绍。我该如何提高加载xml文档的速度
public class MyItem
{
private string layout;
private string column;
private string columnSpan;
private string row;
private string rowSpan;
private string background;
public MyItem(string layout, string column, string columnSpan, string row, string rowSpan, string background)
{
Layout = layout;
Column = column;
ColumnSpan = columnSpan;
Row = row;
RowSpan = rowSpan;
Background = background;
}
public string Layout
{
get { return this.layout; }
set { this.layout = value; }
}
(未显示 - 列,ColumnSpan,行,行跨度和背景它的处理方式相同布局)
只是在这个例子中,下面显示只有6分的孩子,我要找只有前2个子子文件才能加载xml文档。通过这种方式,我可以使用无论是小型还是大型XML文档所需的任何加载方法。
internal class myDataSource
{
//Loads (MyList) xml file
public static List<MyItem> Load(string MyListFilename)
{
var myfiles = XDocument.Load(MylistFilename).Descendants("item").Select(
x => new MyItem(
(string)x.Element("layout"),
(string)x.Element("column"),
(string)x.Element("columnSpan"),
(string)x.Element("row"),
(string)x.Element("rowSpan"),
(string)x.Element("background")));
return myfiles.ToList();
}
public class MainViewModel : ViewModelBase
{
public void LoadMyList()
{
this.myfiles = new ObservableCollection<MyItemViewModel>();
List<MyItem> mybaseList = myDataSource.Load(MyListFilename);
foreach (MyItem myitem in mybaseList)
{
this.myfiles.Add(new MyItemViewModel(myitem));
}
this.mycollectionView = (ICollectionView)CollectionViewSource.GetDefaultView(myfiles);
if (this.mycollectionView == null)
throw new NullReferenceException("mycollectionView");
}
}
public class MyItemViewModel: ViewModelBase
{
private Models.MyItem myitem;
public MyItemViewModel(MyItem myitem)
{
if (myitem == null)
throw new NullReferenceException("myitem");
this.myitem = myitem;
}
public string Layout
{
get
{
return this.myitem.Layout;
}
set
{
this.myitem.Layout = value;
OnPropertyChanged("Layout");
}
}
(未显示 - 列,ColumnSpan,行,行跨度和背景它的处理方式相同布局)
+1,如果您不想读取所有子节点,最好避免调用读取每个子节点的方法... – user7116
每个子节点都有某种数据,只是不是所有的子子女都有人居住。较小的文档就像一个大纲,只有基本的数据。更大的文档包含所有基本数据以及可能需要的所有其他内容。小的一个是裸骨,另一个提供非常丰富的体验,但都有相同数量的子节点。 –
我同意sixlettervariables,我添加了另一种小文档去大文档的方法,但是这给了我一个错误,说MyItem不包含一个构造,需要少量的参数。当我开始处理每个问题时,很明显我需要两件事 - 我试图避免。 –