3

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

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

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

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

我的方法是对的吗?你会怎么办?

谢谢!

4

3 回答 3

5

这些参数每年都在变化

是的,将它们缓存在内存中。特别是如果它们很大或很复杂。

您应该注意每年一次在正确的时间使它们失效,这取决于它必须有多准确。

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

于 2012-02-14T12:46:16.933 回答
2

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

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

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

于 2012-02-14T12:46:32.597 回答
2

RAM 内存数据访问肯定比任何其他数据访问都要快,除了注册表和 CPU 缓存等 cpu 内存

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

于 2012-02-14T13:13:00.723 回答