DataSet ds = new DataSet();
DataTable dataTable = new DataTable();
ds.ReadXml("File.xml");
dataTable = ds.Tables[0];
LoadListView(dataTable);
<?xml version="1.0"?>
<Book>
<note1>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note1>
</Book>
我正在读取数据集中的整个xml文件,然后将所有记录显示为Listview。 但是当我将所有数据加载到listview时内存消耗更多。 Datatable占用了我机器的所有内存,并且在某些时候偏离了我的异常内存Exception.Is可以在过滤后加载数据表。 上面是我的xml文件,有多个节点我只需加载具有XmlElement的数据表中的那些节点,从&#39; j&#39;开始。 我会很感激你的答案。 我不想使用XMlDocument或Xpathquery或LINQ to XML
答案 0 :(得分:2)
这是基于您知道XML文件结构的非常弱的假设(即格式具有稳定,统一的结构)。此外,我不知道这会给你的情况带来什么样的性能提升(因为更多的对象被实例化)。但是让我们试一试。
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>();
List<int> positions = new List<int>();
bool checkNext = false;
int position = -1;
DataTable dataTable = new DataTable();
dataTable.Columns.Add("to");
dataTable.Columns.Add("from");
dataTable.Columns.Add("heading");
dataTable.Columns.Add("body");
var rs = new XmlReaderSettings();
rs.IgnoreWhitespace = true;
using (var reader = XmlReader.Create(File.OpenRead("data.xml"), rs))
{
while (reader.Read())
{
if (reader.Name == "")
{
list.Add(reader.Value);
position++;
}
if (checkNext)
{
// TODO: apply your filter
if (reader.Value.ToLower().StartsWith("j"))
{
positions.Add(position);
}
}
if (reader.Name == "from")
{
checkNext = !checkNext;
}
}
}
foreach (int match in positions)
{
dataTable.Rows.Add(
list[match - 1],
list[match],
list[match + 1],
list[match + 2]);
}
//LoadListView(dataTable);
}
}