Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用字典而不是XmlDocument吗?_C#_Asp.net_Performance_Dictionary_Xmldocument - Fatal编程技术网

C# 我应该使用字典而不是XmlDocument吗?

C# 我应该使用字典而不是XmlDocument吗?,c#,asp.net,performance,dictionary,xmldocument,C#,Asp.net,Performance,Dictionary,Xmldocument,我有一个XML文件(asp.net)应用程序在启动时加载,每个http请求通过调用GetElementById从中请求至少50个项目。处理它的类是静态的,因此只调用一次XmlDocument.Load()。 XML文件结构非常简单,每个节点只有“ID”标记,节点之间没有层次结构(所有节点都在根节点下)。典型节点的格式如下: bla@bla.com 我想知道在请求内容时,将XML内容(~300个节点)加载到静态字典是否会提高性能。我可以猜测,一旦加载了XmlDocument,它就会将节点缓存在某种

我有一个XML文件(asp.net)应用程序在启动时加载,每个http请求通过调用GetElementById从中请求至少50个项目。处理它的类是静态的,因此只调用一次XmlDocument.Load()。 XML文件结构非常简单,每个节点只有“ID”标记,节点之间没有层次结构(所有节点都在根节点下)。典型节点的格式如下:

bla@bla.com


我想知道在请求内容时,将XML内容(~300个节点)加载到静态字典是否会提高性能。我可以猜测,一旦加载了XmlDocument,它就会将节点缓存在某种有效的数据结构中,但这可能是因为使用字典实现它会带来巨大的开销吗?

300个节点不应该是个问题。但是,如果每个请求对xmldocument进行50次调用,那么您应该测量访问时间。如果不符合你的要求,你可以:

Dictionary<string, string> values = new Dictionary<string, string>();
// read the xml file on start up populate the dictionary.

// after that, every Dictionary access will be O(1)
string value = values["OfficeEmail"];
字典值=新字典();
//启动时读取xml文件并填充字典。
//之后,每个字典访问都将是O(1)
字符串值=值[“OfficeEmail”];

@PetervanderHeijden当我调试代码时,它似乎将大部分时间花在按Id查找节点的函数上。例如,每次随机执行暂停都会导致该函数。没有进行真正的分析。它将每次搜索所有节点。试试看字典是否能提高性能可能是个好主意。字典似乎能提高性能,可能有多种其他方法可以提高性能,但没有看到代码…@Enigmativity这正是我的问题-XmlDocument包含什么样的数据结构?我认为这是一种优化,按ID查找节点将导致比O(n)更高效的复杂性。@Shay_uu_;-XML文档中的任何元素/属性都没有什么特别之处,因此它不会自动创建用于快速搜索的内部结构。它将是线性的。