最佳实践 - 在application_start中加载很多东西?

时间:2012-03-14 18:38:38

标签: c# asp.net performance vps

我有一个网站,里面有很多产品和其他内容。目前,我将所有内容加载到Application_Start的全局列表中,这需要大约15-25秒。

这使得该网站非常快,因为我可以在O(1)时间内获得任何产品/内容。

但是,这是最佳做法吗?

目前我有一个不是VPS / Dedicated服务器的webhotel,因此它会不时地回收应用程序,这使得随机访问者的加载时间最多可达15-25秒(仅限于内容更多的更大数字) 。这当然是完全不可接受的,但我想这可以用VPS解决。

这样做的正常方法是什么?我想像亚马逊这样的网店可能不会将所有产品加载到一个巨大的列表中:-D

任何想法和想法都将受到高度赞赏。

4 个答案:

答案 0 :(得分:6)

您似乎已经回答了您的案例“的问题”这当然是完全不可接受的。“

如果您的目标O(1)对单个产品的数据库的正常请求可能是O(1),除非您需要在产品之间进行复杂的连接。考虑尝试删除所有预缓存逻辑,看看是否有性能问题。您可以通过延迟缓存来限制启动影响。

大型网站经常使用像MemcaheD这样的分布式缓存。

答案 1 :(得分:5)

更具可扩展性的设置是设置Web服务以提供网站在需要时调用的内容。 Web服务需要缓存经常需要的内容,以实现快速响应时间。

答案 2 :(得分:2)

职责分离将帮助您扩展未来。

根据您当前的设置,您只能使用网络服务器的资源,而且,正如您所说,随着您继续添加更多产品,您的启动时间将会失控。

如果您与SQL Server共享每个页面请求的负担,则打开应用程序以允许其根据需要进行扩展。随着时间的推移,您可能决定添加更多Web服务器,群集SQL Server或完全切换到新的数据库后端。但是,如果所有负担都在应用程序池上,那么您就会大大限制自己。

答案 3 :(得分:2)

首先,15-20秒加载数据的时间太长,所以我怀疑这种情况

  • 这次是编译而不是数据加载
  • 数据太多而你已经充满了记忆
  • 用于读取数据的方法非常慢
  • 数据存储太慢,或者结构在文本文件上并且读取速度很慢

我的观点是,您只需要在短时间内缓存需要使用太多次的少量数据。由于某些原因,你描述它的方式不是好习惯。

  1. 如果您有多个池,则会在所有池中读取相同的数据,并且您无缘无故地花费内存。
  2. 您缓存的数据无法更改它们 - 仅供参考
  3. 即使您缓存了一些数据,也需要渲染页面,实际上您需要在最终渲染中进行缓存,而不是数据。
  4. 什么以及如何缓存。

    • 我们缓存最终的渲染页面。
    • 我们还将页面和其他元素的缓存设置为客户端。
    • 我们从数据库中读取和写入数据,我们离开数据库做缓存,他知道的更好。
    • 如果我们缓存数据,那么它们必须是需要用于长循环的少量数据,我们多次避免数据库调用。

    我们也会在他们要求时缓存,如果长时间不使用,或者内存需要空间,这部分缓存就会消失。如果数据的某些部分来自许多表的复杂组合,那么我们制作一个临时的平坦大表,将所有数据保持在一起,每一个都连续。这个表是临时的,如果我们需要太多,我们会制作第二个临时数据库文件来保存这部分数据。

    数据库读取的速度有多快?好了,你不需要担心,你需要检查其他延迟点,就像我说的页面的完整渲染或页面的某些部分。

    您需要担心的是良好的数据库设计,检索数据的快捷方式以及显示它们的优化代码。