缓存策略

时间:2009-02-07 05:41:39

标签: c# winforms memory

我有一个很大的静态数据列表来自我在启动时加载的服务器。我将其加载到foo对象的哈希表中。用户有一个下拉列表,他们可以选择其中一个对象。默认情况下,有50,000个对象占用大量内存。我正在努力减少记忆

在监控使用情况后,事实证明大多数人只使用了大约1,000个。我想拥有它所以gui只加载那1000个,如果他们需要选择一个超出1000的那个,那么他们可以回到服务器或磁盘。

这样做的最佳方法是什么。

5 个答案:

答案 0 :(得分:4)

我假设你在其他地方过滤了这个列表......否则这就是一个列表。在点击数据库之前点击新的,更精简的静态缓存的最简单方法是通过单个方法传递所有请求:

public yourClass GetDesiredObject(string lkupValue)
{
  if (yourCachedHashtable.ContainsKey(lkupValue))
  {
     return yourCachedHashtable[lkupValue]
  }
  else
  {
     //Hit the db to retrieve the object values.
     yourClass obj = yourDatabaseCode.GetNewObject(lkupValue);
     //Add to the cache if desired.
     yourCachedHashtable.Add(lkupValue, obj);
     return obj;
  }
}

答案 1 :(得分:4)

首先加载1000的问题是

  1. 谁会滚动1000?

  2. 返回磁盘会导致下拉菜单重置,他们必须再次滚动。

  3. 解决方案

    1. 为什么不实施自动搜索下拉菜单,并尝试缓存应用程序块,它对我来说非常适合拥有大量数据。

    2. 看看devexpress下拉菜单编辑,你需要购买他们的控件。

答案 2 :(得分:1)

你的下拉列表中有50000个项目吗?这似乎有些过分。也许列表视图控件?您还可以将列表视图创建为虚拟列表视图 - 在此模式下,它将仅根据需要加载项目,如果它们将滚动到视图中,则可以加载其他项目。由于您在列表视图中有这么多项目,我建议您使用某种搜索控件,用户可以使用它来缩小项目列表。

答案 3 :(得分:1)

对于下拉菜单项,

50,000个对象似乎有点过分。也许你想看一个替代的小部件,比如一个带分页的表......

答案 4 :(得分:0)

根据您的数据的性质,如何忘记整个事情并将其留给操作系统?将它放在内存映射文件中。