c#在内存中保存多个字典实例影响性能大还是只保留一个,然后每次取的时候ios 遍历字典典对性能影响大?

2008年8月 .NET技术大版内专家分月排行榜第一
2008年6月 .NET技术大版内专家分月排行榜第二
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
本帖子已过去太久远了,不再提供回复功能。在做项目时,经常会有些字典信息保存到数据库中,在应用程序启动时需要加载到内存中,方便程序随时调用。
直接上代码:
using System.C
using System.Collections.G
using System.L
using System.T
using System.Data.OleDb;
namespace TagReceiver
class AccessHelper
string accessPath = "";
/// &summary&
/// 读取LOC_OWNER表
/// &/summary&
/// &returns&&/returns&
public SortedList GetCodeSet(string connectionString, string tableName)
string cmdText = String.Format("select * from {0}", tableName);
SortedList sl = new SortedList();
// 创建数据库连接
OleDbConnection conn = new OleDbConnection(connectionString);
// 创建command对象并保存sql查询语句
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
conn.Open();
// 创建datareader 对象来连接到表单
OleDbDataReader reader = cmd.ExecuteReader();
// 循环遍历数据库
while (reader.Read())
sl.Add(reader.GetString(0), reader.GetString(1));
// 关闭reader对象
reader.Close();
// 关闭连接,这很重要
conn.Close();
// 一些通常的异常处理
catch (OleDbException e)
LogHelper lh = new LogHelper();
lh.WriteLine(".\\Logs\\DBException.log", e.Errors[0].Message);
如何调用:
SortedList slLocOwner = new SortedList();
SortedList slLocType = new SortedList();
SortedList slFreightCarFactory = new SortedList();
SortedList slPassengerCarFactory = new SortedList();
private void MainForm_Load(object sender, EventArgs e)
LoadDict();
/// &summary&
/// 加载数据库字典
/// &/summary&
private void LoadDict()
string connectionString = String.Format("provider=microsoft.jet.oledb.4.0;data source={0}\\Dict.mdb", Application.StartupPath);
AccessHelper ah = new AccessHelper();
slLocOwner = ah.GetCodeSet(connectionString, "LOC_OWNER");
slLocType = ah.GetCodeSet(connectionString, "LOC_TYPE");
slFreightCarFactory = ah.GetCodeSet(connectionString, "CAR_FACTORY");
slPassengerCarFactory = ah.GetCodeSet(connectionString, "PASSENGERCAR_FACTORY");
阅读(...) 评论()[c#]效率/性能的遍历使用 XElement
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
我工作的方式来分析使用 xml 数据。
给我的文件包含行,看起来像这样:
George | Washington | Carver
或其他人可以给我发送这样的东西
Carver | Washington | George
等等......
不管格式是什么,不管是谁向我发送该文件还将发送我规则如何解析文件。在第一个示例中,它是第一次名称 |中间名 |最后一名。在第二个示例中,它是最后一个名称 |中间名 |第一名
而不是编写一个特殊情况为每种可能性,我创建了一个 XML 文件来描述的元数据。
&first&0&/first&
&middle&1&/middle&
&last&2&/last&
例如,在这种情况。标签 first 对应于 0 ,该值指示该第一名出现在第十的位置。
凭直觉,我以为关于创建一个字典,与设置为该标记,并要将文本的值的键。象这样......
public static IDictionary&string, string& GetLookupTable(string xmlContents)
XElement xmlElement = XElement.Parse(xmlContents);
IDictionary&string, string& table = new Dictionary&string, string&();
foreach (var element in xmlElement.Elements())
table.Add(element.Name.LocalName, element.Value);
然而,我不太熟悉的东西,使我产生怀疑一些东西.NET 执行。
会更好,只是遍历 XElement 而不是创建一个字典吗?我不认为这是一个好主意,因为我相信 XElement 遍历可能真正融入无序的树遍历,拿到我的需要。这样做的 (我有多只 3) 每个属性将是非常低效的。我在这里只猜测......
是从检索 dictionary 时间是固定的吗?我知道,在 Java 中 HashMap 已变得。如果是 c#,以及案例,然后这就好像去因为我将只是遍历一次,然后将无法检索无论在恒定的时间需要更好的路线。
解决方法 1:
为什么不衡量它?我会做什么第一,使代码最简单和衡量的。我预计会变得更加简单的其余代码,所以我会去与那一本字典。如果每个元素就一个整数,但是,我会使用 Dictionary&string, int& 。
是的 Dictionary 是哈希表,所以它具有 o (1) 查找假定您没有可怕的碰撞。
我会使用 LINQ 的 ToDictionary 虽然:
public static IDictionary&string, int& GetLookupTable(string xmlContents)
return XElement.Parse(xmlContents)
.Elements()
.ToDictionary(x =& x.Name.LocalName,
x =& (int) x);
(很明显,将转换到的每个元素 int 而不是 string ,但您可以更改它很容易,如果你真的要 IDictionary&string, string& .)}

我要回帖

更多关于 python 遍历字典key 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信