我在公司的一个大项目上工作。我们收集通过CMS的API方法获得的数据。
离。
DataSet users = CMS.UserHelper.GetLoggedUser(); // returns dataset with users
现在在某些页面上我们需要许多不同的数据,不仅仅是用户,还有CMS树的节点或子树的特定数据。
因此我们想到编写一个自己的“辅助类”,我们以后可以轻松获得不同的数据。
前:
MyHelperClass.GetUsers();
MyHelperClass.Objects.GetSingleObject( ID );
现在问题是我们的“助手类”真的很大,现在我们想从“助手类”中收集不同的数据并将它们写入一个类型化的数据集。稍后我们可以为转发器提供包含来自不同表的数据的类型化数据集。 (甚至来自我之前通过API编写的方法)
问题是:即使在加载页面时,它现在也很慢!它是加载还是初始化整个类?
顺便说一下CMS是Kentico,如果有人使用它的话。
我累了。整夜都试过......但它太慢了。请看一下该架构。 你可能会发现一些不允许的罪行:S
我希望我们能更快地完成工作。谢谢。
答案 0 :(得分:2)
基本思想是将尽可能多的数据加载到这些存储介质中,而不是在单个页面加载上进行。如果您只需要获取一次数据并希望在用户之间和一段时间之间共享数据,那么缓存尤其有用。
如果您已经在做这些事情,那么直接实施它们的尝试尽可能地推迟收集这些数据,选择将其短路而不是预先加载。如果仅偶尔使用数据,这也可以节省大量的页面加载时间。
答案 1 :(得分:2)
瓶颈通常有几种形式:
很多事情可能会影响到这一点,包括您的数据库查询和索引,访问您网站的人数,Web服务器上的内存不足,代码中的大量反射,只是普通的慢速硬件等。这里没有人可以告诉你为什么你的网站很慢,你需要对它进行分析。
为了它的价值,你问了一个关于你的API架构的问题 - 从代码的角度来看,它看起来很好。将字段从一个类复制到另一个类没有任何问题,并且从object
到Guid
或bool
的包装类转换所产生的性能损失可能非常小,可忽略不计。< / p>
由于您询问了性能,因此不清楚为什么要将类架构与性能连接起来。实际上,您可以对类进行微小的微优化,这些优化可能会影响性能,也可能不会影响性能 - 但只需阅读此答案,您将通过这些微优化获得的4或5纳秒已经丢失。网络延迟和数据库查询绝对会使您的API的性能微妙相形见绌。
在评论中,您说“所以静态类没有问题或我的基本错误”。性能方面,没有。从web-app的角度来看,可能。特别是,静态字段是全局的,并且每个AppDomain初始化一次,而不是每个会话 - 变量mCurrentCultureCode
和mcurrentSiteName
听起来特定于会话,而不是AppDomain的全局变量。当具有不同文化设置的用户同时访问该网站时,我会仔细检查这些网站,以确定您的网站是否正确呈现。
答案 2 :(得分:1)
我建议您尝试分析您的应用程序,看看瓶颈在哪里:
DB缓慢加载?
网络流量缓慢?
慢渲染?
客户的流量过多?
剖析世界应该是几乎每个高级程序员的一部分。它是一般工具箱的一部分。学习它,你自己就会得到答案。
干杯!
答案 3 :(得分:0)
首先要为你的应用程序启用跟踪并尝试优化响应大小,缓存并使用一些应用程序和数据库分析器...通过查看代码我恐怕没有人能够帮助你更好。