2014-10-30 60 views
0

我正在开发一个需要从大约500万条记录(大约4GB数据)中搜索记录的asp.net应用程序。客户正在寻找更高的性能并决定使用内存缓存。但是我在将数据从asp.net上传到内存缓存时遇到了问题。我试着改变应用程序池设置,并将虚拟内存设置为0,将私有内存设置为0 ..没有任何结果。它正在上传到1.5GB左右,并抛出内存异常。当我通过在应用程序属性中的构建设置中取消选中“32位”来使用控制台应用程序推送数据时,没有任何问题。 我的问题与asp.net。我使用.net框架工作4.0与4核心服务器,在服务器的可用内存大约49GB。我也尝试在应用程序池中启用64位模式下的32位运行。但没有任何改变。 如果有任何解决方案,请给我建议。内存缓存在Asp.net中的最大限制

+5

你会更好地加快数据库查询,而不是想要缓存所有数据。 – 2014-10-30 07:45:58

+2

如何使用全文搜索的东西(我认为你想要)像Lucene.net? – sisve 2014-10-30 08:21:23

+1

我同意这应该在数据库中完成。如果您提供您正在使用的查询来查找记录和表格架构,我们可以帮助您。 – Magnus 2014-10-30 08:23:39

回答

0

正如John已经提到的那样:查询5.000.000记录是数据库的工作,而不是您的代码。如果你正确地配置数据库(让数据库使用内存作为缓存,正确的索引,性能SQL查询),我会说以99.9%的机会,数据库将比在ASP.NET中创建的任何东西都快得多。

无论如何,如果你真的想以相反的方式来做,你需要创建一个64位的进程。
清单做这件事(从我的头 - 为了完整性无法保证):

  • 解为“任何CPU”或“64”
  • 运行IIS在64的编译(所有部分)位CPU的OS(这应该是49 GB RAM可用的情况下)
  • 设置应用程序池以作为没有存储器极限的64位过程运行:
    • 应用程序池 - >“您的池” - >高级设置...
      - >启用32位应用程序 - >错误
      - >专用空间限制(KB) - > 0
      - >虚拟内存限制(KB) - > 0
+1

或者可能让缓存作为自己的进程运行在IIS之外。 – Magnus 2014-10-30 08:31:35

0

谢谢你们。我同意我可以在我的数据库中做到这一点。我正在处理每秒大量的请求。我的数据库查询是这样的:select a,b,c,d,e从table1其中id =主键...这是非常简单和高效的查询..虽然这是高效的..它没有提供所需的性能。所以我们决定使用缓存。现在我们通过分别创建一个Windows服务(它创建一个代理和主机缓存)和Web应用程序来解决这个问题。网络应用程序内部调用这个Windows服务..它现在工作。谢谢你的所有建议。