0

我的网站经常使用一些表格。例如,最大的一个是保存大量静态数据的位置表。因此,每当用户访问我的网站时,他们都会在这些位置进行搜索。它拥有大约 150 万行。我已经使用内存分析器调整了这个表的大小,它的内存将近 500mb。最终我还有一些静态表,我需要非常快速地访问它们,它们是静态的。最后,我的内存转储达到 1.5 GB 内存使用量。这对我来说不是问题,因为我有一个强大的服务器,有很多可用的内存。但是当我提出这个问题时,高级开发人员和架构师告诉我应该审查我的项目,因为一个进程不应该占用那么多内存。但我需要快速访问,我不想每次都查询我的数据库。我需要在 1 秒内回复。这就是为什么记忆看起来像我的方式。有没有更好的建议?

我正在使用 asp.net 和 ms SQL 2008。目前是 Framework 4.0,但很快就会是 4.5。我的网络服务器上的 IIS 7.5。

感谢您的帮助。谢谢。

4

2 回答 2

1

这个过程绝对不应该拥有这个内存本身。http 服务器可能希望进程并行运行数(千)次,这样您就会遇到麻烦。现在这并不是说数据不应该在内存中。所有 Google 数据大部分时间都在内存中。你只需要小心你如何加载它们。

  1. 如果数据库服务器有任何好处(应该是这样),那么如果它们被频繁访问或者您设置了适当的缓存策略,它实际上会将数据保存在内存中。这应该会给您带来不错的性能,而无需做太多工作或任何奇怪的技巧。
  2. 您可以使用memcached(这是 Google 的方式)。
  3. 您可以将数据保存在具有自定义格式的文件中,以便在您的特定用例中快速访问,并通过内存映射访问它。
于 2012-10-10T11:12:40.740 回答
0

不建议在生产环境中保留大量静态数据。正如我在您的场景中看到的那样,您的数据集可以标准化并管理最小数量的初始数据集。

另一种方法是使用像构建器这样的设计模式来构建数据集,仅按需构建数据集。

通过采用这种方法,您可以避免在内存中保留不必要的数据集。并在需要时加载所需的内容。构建器的基本思想可在 [1] 上找到。

[1].http://www.oodesign.com/builder-pattern.html

于 2012-10-10T11:25:38.140 回答