C# 在ClickOnce/WCF应用程序中缓存数据的最佳方式是什么?

C# 在ClickOnce/WCF应用程序中缓存数据的最佳方式是什么?,c#,wcf,clickonce,C#,Wcf,Clickonce,我有一个SaaS应用程序,作为ClickOnce应用程序部署到客户端,客户端通过WCF NetTcp连接连接到我的云服务器。数据都存储在服务器上,但是客户机需要能够看到他的数据 一切正常,但当有大量数据要传输时,我遇到了一些问题,例如,在一个表中,客户端可能有大约3000条记录,而通过WCF连接需要非常长的时间。这就是问题1:如何从服务器中提取必要的数据。现在,试图同步进行,只是超时而已。我可以提高超时限制,但这感觉有点像暴力。您会推荐某种异步解决方案吗?如果是,您将如何通过WCF实现这一点 问

我有一个SaaS应用程序,作为ClickOnce应用程序部署到客户端,客户端通过WCF NetTcp连接连接到我的云服务器。数据都存储在服务器上,但是客户机需要能够看到他的数据

一切正常,但当有大量数据要传输时,我遇到了一些问题,例如,在一个表中,客户端可能有大约3000条记录,而通过WCF连接需要非常长的时间。这就是问题1:如何从服务器中提取必要的数据。现在,试图同步进行,只是超时而已。我可以提高超时限制,但这感觉有点像暴力。您会推荐某种异步解决方案吗?如果是,您将如何通过WCF实现这一点

问题2:一旦把所有这些数据都记录下来,就有必要对其进行缓存,并进行某种后台同步,以确保数据保持新鲜。但是如何缓存它呢?我应该在ClickOnce应用程序中附带SQL Express数据库吗?还是有更简单的方法?记住ClickOnce应用程序的沙箱限制,您可以将缓存数据保存到哪里?

对于问题1,您可以。同时考虑不要同时检索所有3000条记录。如果您的用例允许,您可以分页数据

对于问题2,可以缓存它。您可以做一些简单的事情,比如内存中的线程安全字典,或者线程安全的数据单例实例(如果有意义的话)。如果需要持久化到磁盘,我会选择基于文件的数据库,这样就不需要安装客户端

对于问题1,您可以。同时考虑不要同时检索所有3000条记录。如果您的用例允许,您可以分页数据


对于问题2,可以缓存它。您可以做一些简单的事情,比如内存中的线程安全字典,或者线程安全的数据单例实例(如果有意义的话)。如果需要持久化到磁盘,我会选择基于文件的数据库,这样就不需要安装客户端

根据数据以及允许缓存或同步的数据量,您可以查看SQL Compact 3.5(而不是4.0)中的复制功能,因为它支持与SQL server的部分同步

如果您不能在本地将数据存储在自己的数据库中(为此,我建议使用SQL Compact 4.0而不是SQL Express),那么您就必须拥有自己的更新逻辑


或者,如果不需要长时间缓存数据,则可以使用企业库缓存块并将数据存储在应用程序存储器中。如果您希望缓存查询和结果而不是单个记录,则此方法最适合。

根据数据以及允许缓存或同步的数据量,您可以查看SQL Compact 3.5(而不是4.0)中的复制功能,因为它支持与SQL server的部分同步

如果您不能在本地将数据存储在自己的数据库中(为此,我建议使用SQL Compact 4.0而不是SQL Express),那么您就必须拥有自己的更新逻辑

或者,如果不需要长时间缓存数据,则可以使用企业库缓存块并将数据存储在应用程序存储器中。如果您希望缓存查询和结果而不是单个记录,则此方法最适合