【问题标题】:How to write a proxy with C#?如何用 C# 编写代理?
【发布时间】:2011-07-17 06:52:56
【问题描述】:

我编写了一个具有多用户的 Web 应用程序。他们是选择数据或插入数据,每件事都是这样。但是选择一些数据需要太多时间,例如使用 LINQ 或数学计算。我认为: 我的用户1:

select * from MyTable -----> save as caching via proxy server in machine

我的用户 2:

select * from MyTable2 -----> save as caching via proxy server in machine

我的用户 3:

insert into MyTable2 -----> Update caching(select * from MyTable2) via proxy server in machine

如果另一个用户更新表,如何编写代理服务器来选择更快并更新选择结果?

【问题讨论】:

  • 我建议使用预先存在的缓存解决方案,而不是从头开始编写新的解决方案
  • 我不知道这是否适用于您的情况,或者您是否只是使用了一个简化的示例,但在您的 SELECT 上使用了WHERE 子句(并且只选择了必填字段而不是*)可能比手动缓存数据更能提高性能。请记住,数据库访问通常非常快(当索引位于正确的位置并且您只请求真正需要的数据时)并且同一子网上的机器之间的网络连接通常也很快。您是否进行了基准测试以找出性能瓶颈所在?
  • 所以你想要一些东西,让最近/经常选择的行在内存中可用,并确保对表所做的任何更新都反映在内存行中,同时处理内存压力等?这听起来像是 SQL Server 内部已经在做的事情(而且大部分时间都做得非常好)。

标签: c# asp.net visual-studio visual-studio-2008 proxy-classes


【解决方案1】:

我想我明白你的意思。如果您想获得绘图上显示的结果,那么一种方法是让服务器缓存任何机器请求的所有数据。我认为这在内存方面开销太大,但您可以通过多种方式完成此操作。例如,创建一个代理类来处理所有数据库调用,然后缓存结果。每当下一次调用完成时,处理程序类都会检查代理,如果存在则返回;如果没有,则调用并将结果添加到缓存中。

顺便说一句,我认为这部分已经被现有的 ORM 考虑到了,不是吗?

【讨论】:

  • 我不明白最后一句话:“顺便说一句,我认为这部分已经被现有的 ORM 考虑到了,不是吗?”
  • ORM = 对象关系映射。简单来说,这是 Entity Framework、Linq To Sql、NHibernate 的通用名称。我想他们都已经在开箱即用的情况下内置了这个功能。哦,顺便说一句=顺便说一句:-)
【解决方案2】:

你为什么想要一个代理?

您想要完成的是使用ADO Entity Framework的好处之一

你在网上到处都有教程,但你可以开始with this one

ADO Entity Framework 足够智能,可以缓存多次使用的对象,并在它们不同步时刷新它们,它们还具有一系列奇妙的属性,如后期绑定和并发处理。

【讨论】:

  • 巴力山;我认为你不理解我。我也是实体框架的专业人士。谢谢建议。但我不想重新生成数据我将选择结果保存在另一台机器中
  • 你为什么要处理一台机器(多一台连接、多一份许可证、多一份所有东西)却不能正常工作? ORM + 缓存开箱即用,无需重新发明轮子!
  • ok;) 但是我必须使用 linq to sql 缓存在 linqtosql 中可以吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2020-01-31
  • 2013-05-07
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多