Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.net应用程序中管理频繁的数据访问?_C#_Sql_.net_Asp.net Mvc_Caching - Fatal编程技术网

C# 如何在.net应用程序中管理频繁的数据访问?

C# 如何在.net应用程序中管理频繁的数据访问?,c#,sql,.net,asp.net-mvc,caching,C#,Sql,.net,Asp.net Mvc,Caching,我的sql数据库中有三个表,分别是特价商品,业务,评论。在我的母版页中,我有一个提示区,我需要在每个页面刷新期间根据特定条件显示这3个表中的替代数据(这些表有1000多条记录)。那么在这种情况下,从这些表中检索数据的最佳选项是什么 我知道,每次从数据库访问数据都不是一个好主意,有没有其他好方法可以做到这一点,比如缓存或其他有效管理数据的新技术。现在,在每次页面刷新后加载页面需要花费太多时间 请给出你的建议 目前,我计划创建一个用于数据检索的SP,并将返回的值保存在会话中 因此,我们可以访问此会话

我的sql数据库中有三个表,分别是特价商品业务评论。在我的母版页中,我有一个提示区,我需要在每个页面刷新期间根据特定条件显示这3个表中的替代数据(这些表有1000多条记录)。那么在这种情况下,从这些表中检索数据的最佳选项是什么

我知道,每次从数据库访问数据都不是一个好主意,有没有其他好方法可以做到这一点,比如缓存或其他有效管理数据的新技术。现在,在每次页面刷新后加载页面需要花费太多时间

请给出你的建议

目前,我计划创建一个用于数据检索的SP,并将返回的值保存在会话中


因此,我们可以访问此会话中的数据,而不是每次页面刷新时都访问数据库。但是我不知道还有没有其他有效的方法可以达到同样的效果。

一个建议是将您的数据库仅仅看作一个持久化状态的存储库。您的应用层可以缓存业务对象的集合,在它们更改时保持它们,并立即将状态返回到表示层(网页)


这假设所有数据更新都来自您的页面。如果数据库是从不同的地方填充的,那么您需要将所有内容绑定到一个公共应用层,或者轮询数据库以更新缓存。

一个建议是将您的数据库仅仅看作一个存储库来持久化状态。您的应用层可以缓存业务对象的集合,在它们更改时保持它们,并立即将状态返回到表示层(网页)

这假设所有数据更新都来自您的页面。如果数据库是从不同的地方填充的,则需要将所有内容绑定到一个公共应用层,或者轮询数据库以更新缓存

每次从数据库访问数据都不是一个好主意

这并不总是正确的,这取决于数据更改的频率。如果选择缓存数据,则每次更改数据时都必须重新验证数据。我假设您不想显示静态计数,或者显示的内容不会改变。如果不是这样,您可以简单地存储在cookies中并从那里显示

现在,在每次页面刷新后加载页面需要花费太多时间

你知道什么花太多时间吗?是客户端代码还是服务器端代码(请使用一瞥了解这一点)?如果是服务器端,则是命中数据库和查询执行时间的代码,还是内存操作中的服务器端代码

通常,提高性能的第一步是精确地测量性能,为了解决这些问题,您应该知道问题所在

根据您的第一条语句,如果我是您,我将在一个单独的div中显示每个计数,该div将异步刷新。您可以选择使用计时器定期更新数据,或者更好地从服务器推送数据(使用信号器)。更新将透明进行,因此无需重新加载页面

希望这有帮助

每次从数据库访问数据都不是一个好主意

这并不总是正确的,这取决于数据更改的频率。如果选择缓存数据,则每次更改数据时都必须重新验证数据。我假设您不想显示静态计数,或者显示的内容不会改变。如果不是这样,您可以简单地存储在cookies中并从那里显示

现在,在每次页面刷新后加载页面需要花费太多时间

你知道什么花太多时间吗?是客户端代码还是服务器端代码(请使用一瞥了解这一点)?如果是服务器端,则是命中数据库和查询执行时间的代码,还是内存操作中的服务器端代码

通常,提高性能的第一步是精确地测量性能,为了解决这些问题,您应该知道问题所在

根据您的第一条语句,如果我是您,我将在一个单独的div中显示每个计数,该div将异步刷新。您可以选择使用计时器定期更新数据,或者更好地从服务器推送数据(使用信号器)。更新将透明进行,因此无需重新加载页面


希望这能有所帮助。

我同意1000条记录看起来并不多,但如果您真的不担心会有轻微的延迟,您可以尝试使用HttpContext.Cache对象。它非常像一个带有字符串键和对象值的字典,另外还可以设置过期时间等

请原谅输入错误,在手机上,因此无需编译检查:

var tableA = HttpContext.Cache.Get("TableA")
if tableA == null {
    //if its null, there was no copy in the cache so create your
    //object using your database call
    tableA = Array, List, however you store your data
    //add the item to the cache, with an expiration of 1 minute
    HTTPContext.Cache.Insert("TableA", tableA, null, NoAbsoluteExpiration, TimeSpan(0,1,0))
}

现在,无论有多少请求通过,您每分钟只访问一次数据库,或者在考虑到您的需求后认为合理的时间内访问一次数据库。如果出现某些特殊情况,您还可以触发从缓存中删除该项。

我同意1000条记录似乎并不多,但如果您真的不担心会有轻微延迟,您可以尝试使用HttpContext.cache对象。它非常像一个带有字符串键和对象值的字典,另外还可以设置过期时间等

请原谅输入错误,在手机上,因此无需编译检查:

var tableA = HttpContext.Cache.Get("TableA")
if tableA == null {
    //if its null, there was no copy in the cache so create your
    //object using your database call
    tableA = Array, List, however you store your data
    //add the item to the cache, with an expiration of 1 minute
    HTTPContext.Cache.Insert("TableA", tableA, null, NoAbsoluteExpiration, TimeSpan(0,1,0))
}

现在,无论有多少请求通过,您每分钟只访问一次数据库,或者在考虑到您的需求后认为合理的时间内访问一次数据库。如果出现某些特殊情况,您还可以触发从缓存中删除项目。

谢谢Ed,目前我计划创建一个SP用于数据检索,并保留会话中返回的值。因此,我们可以访问此会话中的数据,而不是每次页面刷新时都访问数据库。但是