问题标签 [asp.net-caching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1998 浏览

asp.net - HttpContext.Current.Cache 如何将对象保存在内存中?

HttpContext.Current.Cache用来将对象保存到内存中。

我的代码看起来像这样:

这工作非常快!

我很好奇它是如何将对象保存到内存中的。

它是保存指针值,还是对对象进行哈希处理,然后将其保存到内存中,当我请求它时,它会反序列化它?

0 投票
1 回答
1076 浏览

asp.net-mvc-3 - 在内存或数据库中缓存昂贵的 SQL 查询?

让我从描述场景开始。我有一个带有 SQL Server 2008 的 MVC 3 应用程序。在其中一个页面中,我们显示了从数据库返回的产品列表,并且每个登录用户都是唯一的。用于返回产品列表的 SQL 查询(实际上是 VIEW)非常昂贵。

  • 它基于非常复杂的业务需求,现阶段无法更改。
  • 数据库架构无法更改或重新设计,因为它被其他应用程序使用。
  • 有 50k 个产品和 5k 个用户(每个用户可以访问 1 到 50k 个产品)。

为了显示登录用户的产品页面,我们使用:

上面的查询最多返回 50 行(最大页面大小)。WHERE 子句将行数限制为最多 50k(用户有权访问的产品)。加载页面大约需要 5 到 7 秒,而这正是上面的 SQL 查询在 SQL 中运行所需的时间。 问题

用户进入产品页面,很可能使用分页,重新排序结果,进入详细信息页面等,然后返回列表。并且每次显示结果需要5-7s。

这是不可接受的,但同时业务团队已经接受第一次加载产品页面可能需要 5-7 秒。因此,我们想到了CACHING

我们现在有两个选项可供选择,至少对我而言,最“明显”的一个是使用 .Net 缓存(在内存中/在 proc 中)。(请注意,由于我们的提供商/托管合作伙伴的技术限制,目前不允许分布式缓存)。

但我对此不太满意。我们最终可能会在内存中有很多产品(当有 50 或 100 个用户同时登录时),这可能会导致服务器上的其他问题,例如 .Net 在我们的代码插入新项目时不断删除缓存项目以释放​​空间。

第二选项:

这里的主要问题是生成用户 x 产品 x 访问视图非常昂贵,因此我们认为我们可以创建一个平面表(或者换句话说,数据库中所有产品 x 用户的缓存)。该表将完全是视图的结果。但是,如果添加新产品、更改用户权限等,结果可能随时更改。因此我们需要不断刷新表(这可能需要几秒钟),这开始变得有点复杂。

同样,尽管我们可以实现某种缓存提供程序,并且根据用户的请求,我们将运行原始 SQL 查询并从视图中选择产品(5-7 秒,只接受一次)并将结果保存在平面中SQL 中名为 ProductUserAccessCache 的表。下一个请求,我们将通过快速查询从这个缓存表中获取值(因为我们可以很容易地识别为该特定用户缓存的结果),而无需在 SQL 中进行计算。每当添加产品或更改权限时,我们都会截断缓存表,并在新请求时为请求的用户重新填充该表。这对我来说似乎并不太复杂,但我们在这里所做的基本上是创建一个新的缓存“提供程序”。

  • 有没有人有这种问题的经验?
  • 使用 .Net 缓存(在 proc 中)会更好吗?
  • 有什么建议么?
0 投票
0 回答
35 浏览

c# - ref 问题的 asp.net 缓存

我正在使用 C# 并在 proc 缓存框架中使用 asp.net 来缓存我的大对象。因此,我将对象放入 .net 缓存中,并在代码中的多个位置查找它。从缓存中检索对象后,我修改它,例如。改变对象的属性等。看起来,对象是通过 ref 存储在 .net 缓存中的,而不是按值存储的。因此,如果我更新已从缓存中提取的对象,它也会更新缓存中的对象。

有什么方法可以避免这种情况发生 - 我不希望缓存中的内容被更改反映。

0 投票
1 回答
228 浏览

asp.net - 获取带有键的缓存元素

在 ASP.NET 中,我们有

获取所有缓存对象的元素。

我们是否有任何方法来获取以特定字符串开头的缓存对象。就像是

代替

0 投票
1 回答
11 浏览

browser-cache - 浏览器缓存功能与 asp.net 缓存功能

默认情况下,浏览器会缓存静态文件,如图像、js 和 css 文件。它还缓存http get请求。如果这个特性已经存在,那么为什么我们需要 asp.net 输出缓存特性呢?

谢谢。

0 投票
2 回答
99 浏览

asp.net - 在这种情况下我应该使用会话还是缓存?或者是其他东西?

我必须创建一种机制来存储和读取每个用户的首选项(控制默认值和设置)。我有一个与网络流量有关的问题,因为可以通过 Internet 访问数据库,并且应用程序服务器有时连接到较差的 512Kbps Internet 连接。

我的应用程序可以同时拥有大约 50 个用户,每个页面/表单最多可以有 50 个项目(首选项)。页数约为 80 页。

那么,从性能角度考虑,我应该选择哪个来减少网络流量?会话还是缓存?

更新

我创建了两个示例页面,一个使用缓存,另一个使用会话。

负载测试 90 个用户

存储内容 1000 个元素 每个元素的值 20 个字符

以下是每个测试用例的结果:

MemoryCache 分配的总字节数为 330,725,246

分配最多内存的函数

源代码:

会话 分配的总字节数为 111,625,747

分配最多内存的函数

源代码:

我忘了提到我正在创建一个与 ASP.Net 和 WPF 项目一起使用的解决方案,但是,如果 Session 比 MemoryCache 选项好得多,我可以为每个平台提供不同的解决方案。

0 投票
0 回答
100 浏览

asp.net - 使用 asp.net 进行缓存

我正在使用 vb.net 和 asp.net。我的 Web 应用程序被多个并行用户使用。我有一个名为“Tracked_Table”的表

我想将此表缓存 10 秒,10 秒后,我想用最新的“Tracked_Table”数据重新加载缓存。

我试过下面的代码..(ASP.NET 和 VB.NET)

-- 在页面加载:

-- 页面加载结束

在 Fillcache 函数中,我编写了以下代码。

这就是我试图使用缓存的全部内容..

但是此代码似乎不适用于并行多用户。

任何人都可以帮助我解决这个问题..

0 投票
1 回答
394 浏览

c# - 应用程序池重新启动后不久,IIS 服务器从 0% 跳到 100%

我在我的网站的应用程序池中将“超时限制”设置为 5 分钟。

我注意到它经常停止和重新启动。应用程序池重新启动后不久,w3svc.exe开始出现奇怪的行为,CPU 在 0 到 100% 之间上下波动。

在 CPU 开始上下移动之前,可以从浏览器访问应用程序,所以就好像应用程序已经“运行”一样,所以我认为它已启动......如果这意味着任何事情。

最初看到它时我很恐慌,因为我担心它可能是我的 C# ASP.NET MVC 应用程序中的代码,但后来我意识到这在上下拍摄大约 5 分钟后平静下来,内存和 CPU 使用率又恢复了到可接受的状态。

我已将应用程序池的超时设置为 0,以防止它频繁进入此循环,但我不确定它在做什么,所以我想对其进行微调。

我一直在寻找与缓存有关的事情,因为我担心服务器可能正在缓存我/Content包含数千张图像的整个文件夹。

0 投票
2 回答
1618 浏览

c# - 使用 MemoryCache 类检查空缓存的最佳方法是什么?

我正在使用简单ObjectCacheMemoryCache类来实现缓存。

我想添加方法来检查空缓存但不基于任何键只想检查整个缓存是否为空我该怎么做?

0 投票
4 回答
9144 浏览

c# - OutputCache / ResponseCache VaryByParam

ResponseCache有点替代OutputCache; 但是,我想做服务器端缓存以及每个参数输入。

根据此处此处的一些答案,我应该使用IMemoryCacheIDistributedCache执行此操作。我对在参数不同的控制器上缓存特别感兴趣,以前在 asp.net 4 中使用OutputCacheVaryByParam类似这样:

我将如何在 asp.net 核心中复制它?