首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >共享主机提供商上的可用RAM

共享主机提供商上的可用RAM
EN

Stack Overflow用户
提问于 2009-11-02 15:58:39
回答 1查看 513关注 0票数 1

我正在开发商业应用程序,它能容纳5万到15万家公司。每个公司(db行)都用4-5个属性/列表示(标题、位置、.)。ORM是LINQ2SQL。

我必须做一些计算,为此,我对特定的公司有很多疑问。现在,我每次需要的时候都会访问db,它会产生50-200个查询,这取决于计算的复杂性。我试图将所有公司都缓存起来,对于db中的10,000行(公司),它需要大约5,5MB的缓存。在这个场景中,我只有一个查询。

此应用程序将位于共享主机服务器上,因此我的资源有限。我很感兴趣,如果我尝试加载,比如说100,000家公司(行,对象),会发生什么?还是把它藏起来?

普通托管公司对ASP.NET应用是否有内存限制?它是否依赖于专用的应用程序池(我可以将应用程序放到专用池中)?

选项是

  • 将整个表加载到c#对象。Id做了一些内存分析,10,000个对象需要5MB内存
  • 查询db才能在需要时获得引用对象。

任务是:对于给定的公司A,建立连接的公司树。

表和列

公司: IdCompany,头衔,地址,联系方式

CompanyConnection: IdParentCompany,IdChildCompany

EN

回答 1

Stack Overflow用户

发布于 2009-11-23 22:34:21

您的共享主机可能是作为虚拟机运行的Windows Server上的IIS 7。这台机器将像任何普通机器一样运行--它不知道被共享或虚拟化。

您应该期望Windows在磁盘没有物理RAM时开始分页到磁盘,然后只有在页文件填充磁盘时才会抛出内存错误。当然,您永远不希望将温缓存的任何部分分页到磁盘。

Windows本身可以开始唠叨您内存不足,但这与“紧急情况”不同,应用程序将继续请求RAM,并将继续提供内存(尽管是从页面文件中提供服务)。

如果应用程序可能崩溃,并留下损坏的状态或部分事务,则应该进行防御编码,并在开始操作之前检查内存是否可用。

用假装的数据在循环中创建预期的对象数,并观察框上的内存消耗--工作进程的工作集就是要观察的。您可以在任务管理器中这样做。

注意页码错误。这些事件是当内存操作必须定向到磁盘时发生的。

而且,非常大的对象集会导致垃圾收集周期超过1秒。在像交易和市场数据这样的时间敏感应用程序中,这可能是一个大问题。

希望这能有所帮助。

更新:我为一个大型数据挖掘应用程序做了类似的缓存。

每个ORM类型都有一个GetObject方法,它使用一个巨大的缓存或进入磁盘,然后更新缓存: Person.GetPerson(检查人员缓存,转到db,添加到人员缓存)

现在,我的查询只返回结果的唯一键。然后使用上述方法获取每个密钥。一开始很慢直到缓存建立起来但是..。

关键是每个查询结果指向内存中的同一个实例!这意味着由于共享,内存占用要小得多。

查询结果也会被缓存。当然了。

在对象不是不可变的情况下,每个对象写入都会在巨大的缓存中更新自己的实例,但也会导致所有与该对象类型有关的查询缓存本身失效!

当然,在这个应用程序中,写作为主要的参考数据是很少见的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1662138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档