从磁盘读取与从 AppFabric 缓存读取之间的性能比较

本示例显示从 AppFabric 缓存存储和读取比从磁盘存储和读取更高效。

本示例读取很多图像文件以模拟用户从磁盘或从缓存访问文件的请求,并比较提供图像文件所需的时间。

备注

提供这些示例仅是为了教育目的。它们不能用于生产环境,并且尚未在生产环境中进行测试。Microsoft 不对这些示例提供技术支持。

先决条件

理想情况下,用户应该了解 Windows PowerShell 脚本。

本示例假定以下条件为真:

  • 安装了 Windows PowerShell 2.0。

  • 安装了 Microsoft AppFabric 1.1 for Windows Server。(此操作还会向 GAC 中添加所需的 DLL。)

配置 AppFabric 缓存

如果尚未执行此操作,请使用 Microsoft AppFabric 1.1 for Windows Server 配置工具(使用默认设置)配置 AppFabric 缓存。此示例假定 AppFabric 缓存使用默认设置(cacheHostName=AppFabricCachingService 和 cacheName=default)配置。

启动缓存群集

  1. 以提升的模式打开 Windows PowerShell 命令窗口,并运行以下命令以添加分布式缓存管理模块:

    Import-Module DistributedCacheAdministration
    
  2. 运行以下命令以授予您的用户帐户以客户端身份访问缓存客户端的权限。提供您的用户和域名。

    Grant-CacheAllowedClientAccount domain\username
    
  3. 使用 Get-CacheAllowedClientAccounts 命令验证您的用户帐户是否已被授予访问权限。

  4. 使用 Start-CacheCluster 命令启动群集。

生成并运行此示例

此示例会自动链接到 GAC 的 AppFabric 缓存 DLL (Microsoft.ApplicationServer.Caching.Client.dll 和 Microsoft.ApplicationServer.Caching.Core.dll)。

  1. 在 Visual Studio 中打开 DiskVersusCachePerformance.sln 解决方案。

  2. 打开命令提示符并将目录更改为:<示例的位置>\CacheVersusDiskPerformance\DiskVersusCachePerformance\bin\Debug

  3. 需要向本示例传递一个命令行参数:到文件共享目录(DiskVersusCachePerformance 文件夹的一部分)的路径。(您也可以在“命令行参数”部分中将其添加到项目属性中)。

  4. 运行此 exe 即可启动示例测试:

    <Location of the sample>\CacheVersusDiskPerformance\DiskVersusCachePerformance\bin\Debug> DiskVersusCachePerformance.exe ..\..\..\fileshare
    

本示例所执行的操作在文件共享文件夹的 useractions.xml 文件中描述。支持以下操作。

操作 参数 描述

PageSize

大小

设置页大小(要读取的文件数量)

LogIn

UserName

登录用户

LogOut

UserName

注销用户

ViewAlbum

AlbumIndex

移动到文件夹“album[Index]”

ViewPage

PageIndex

读取文件 [PageIndex*PageSize - PageIndex*(PageSize+1)-1]

ViewNextPage

N/A

移动到下一组文件 [(PageIndex+1)*PageSize - PageIndex*(PageSize+2)-1]

ViewPrevPage

N/A

移动到上一组文件

可以按如下方式定义操作序列。

  <useraction>    <action>PageSize</action>     <data>500</data>      </useraction>
  <useraction>    <action>LogIn</action>        <data>tom</data>      </useraction>
  <useraction>    <action>ViewAlbum</action>    <data>0</data>        </useraction>
  <useraction>    <action>ViewPage</action>     <data>0</data>        </useraction>
  <useraction>    <action>ViewNextPage</action> <data>null</data>     </useraction>
  <useraction>    <action>ViewPrevPage</action> <data>null</data>     </useraction>
  <useraction>    <action>LogOut</action>       <data>tom</data>      </useraction>

前面的分段解释为:

  1. 将每页的项数设置为 500

  2. 登录 tom(允许已登录用户访问此页)

  3. 选择 album0

  4. 查看第一页(从磁盘或缓存读取文件 0-499)

  5. 查看下一页(尝试从磁盘读取文件 500-999)

  6. 查看上一页(既然已将文件加载到缓存,从缓存重新读取文件 0-499)

  7. 注销(还原授予的权限)

每次注销时,示例报告从磁盘访问文件与从 AppFabric 缓存访问文件的性能比较。

备注

以后每次运行本示例时,使用 Restart-CacheCluster 命令清除缓存并等待 10-15 秒。

备注

在运行本示例期间,您可能会遇到消息,如 [size2_il.cur-DiskRead- error 2 Delay (ticks) 7128]。该错误显示 FileInfo 报告的文件大小与从磁盘读取的文件的实际大小的差别。可以忽略该差别,因为存储在缓存中的数据大小等于从磁盘读取的数据大小。

疑难解答

如果数据没有添加到缓存中,则缓存的逐出策略可能会产生妨碍。若要确保缓存没有任何逐出策略集,请运行以下命令以删除默认缓存并在没有逐出策略的情况下重新创建它:

Remove-Cache -CacheName default
New-Cache -CacheName default -Eviction None

删除本示例

使用 Restart-CacheCluster 命令重新启动缓存群集以清除缓存中的数据。

另请参阅

其他资源

示例(AppFabric 1.1 缓存)

  2012-03-05