我正在寻找意见和最佳编码实践。
我需要从数据库中获取信息,例如SELECT this, that FROM MyDB
(返回2个字段)。
使用哈希表进行临时存储是否有误?
有没有更好的方法来完成同样的事情?
如果我返回超过2个字段,最好是升级到DataSet
或其他什么?
我正在寻找简单的效率。
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GetData();
foreach (DictionaryEntry de in ht)
{
DoSomething(Convert.ToInt32(de.Key), de.Value.ToString());
DoMore(Convert.ToInt32(de.Key), de.Value.ToString());
//etc...
}
}
Hashtable ht = new Hashtable();
private void GetData()
{
//connect to DB and use reader to fill hashtable ht with results..
}
private void DoSomething(int key, string value)
{
//do something with hashtable ht data
}
private void DoMore(int key, string value)
{
//do something else with hashtable ht data
}
}
答案 0 :(得分:1)
您提议的是在程序中本地缓存整个表格。这有利有弊:
优点:
缺点:
结论:
通常您不应该这样做,您只需要在需要时向数据库请求所需的值。但有时候它可能有意义。
答案 1 :(得分:1)
最好的办法是创建一个真正简单的数据对象。
private class MyData
{
public int Id { get; set; }
// Etc
}
接下来,使用强类型字典类。
Dictionary<int, MyData> myDbCache = new Dictionary<int, MyData>();
答案 2 :(得分:0)
您是否只考虑了DictionaryEntry
一个键/值对或使用具有两个命名属性的域对象?
答案 3 :(得分:0)
这将取决于您在桌面上有多少条记录,以及哈希键的“随机”程度。您希望避免将密钥散列到同一个插槽以避免冲突,从而降低性能。
答案 4 :(得分:0)
如果您需要存储密钥/参数值,我建议您选择Dictionary<string,string>
而不是哈希表。
答案 5 :(得分:0)
如果需要从多个页面访问您的数据(可能是这种情况),您可以将它们存储在静态字段中(实际上使用字典),因此需要为整个应用程序加载一次(每个用户一次) )。
这里封装在一个单身人士中:
public class Globals
{
private Context _current;
private Dictionary<int, string> _dbValues;
public Dictionary<int, string> DbValues
{
get
{
if (_dbValues == Null)
{
// ... Load our data here
}
return _dbValues;
}
set
{
}
public Globals Current
{
get
{
if(_current == Null)
_current = Context();
return _current;
}
}
private Globals()
{ }
}
// Can be used this way
var value = Globals.Current.DbValues[key1];