从数据库查询还是从内存查询?哪个更快?

问题描述 投票:0回答:3

我正在尝试提高用 C# 和 .NET 2.0 开发的、处理大量文件的 Windows 服务的性能。我想每秒处理更多文件。

在其过程中,对于每个文件,该服务都会执行数据库查询以检索系统的一些参数。

这些参数每年都会变化,我认为如果将这些参数作为单例加载并定期刷新该单例,我会获得一些性能。我不会对正在处理的每个文件进行数据库查询,而是从内存中获取参数。

完成该场景:我使用 Windows Server 2008 R2 64 位,SQL Server 2008 是数据库,C# 和 .NET 2.0,如前所述。

我的方法正确吗?你会怎么办?

谢谢!

c# performance windows-services singleton file-processing
3个回答
6
投票

这些参数每年都会改变

是的,请将它们缓存在内存中。特别是当它们很大或很复杂时。

您应该注意每年在正确的时间使它们失效一次,具体取决于其准确性。

简单地将它们缓存一个小时甚至几分钟可能是一个很好的折衷方案。


3
投票

RAM 内存数据访问肯定比任何其他数据访问更快,除了 cpu 内存(如注册表和 CPU 缓存)

即使您每分钟更改一次,缓存也会更快,所以是的,缓存该查询非常快


2
投票

通过网络或访问磁盘总是比内存访问慢几个数量级。

数据库可以在内存中缓存数据,因此如果您可以实现这一点并且不跨越网络,那么数据库可能会更快,因为它们的数据访问模式/索引等...可能比您的代码更快。 但是,这是最好的情况 - 如果您需要更快,内存缓存会有所帮助。

但是,请注意,内存缓存会增加复杂性和错误。 您必须确定缓存数据的生命周期、如何刷新,并且它越复杂,您将遇到的奇怪的边缘情况状态错误就越多。 尽管它们每年都会发生变化,但你必须处理好这个风口浪尖。

© www.soinside.com 2019 - 2024. All rights reserved.