ASP.NET网站&;独立线程/多线程中的实体框架

ASP.NET网站&;独立线程/多线程中的实体框架,asp.net,entity-framework,iis,Asp.net,Entity Framework,Iis,我们有一个asp.net网站,它使用实体框架4作为SQL Server的ORM映射器 数据库功能位于编译为DLL的项目中,因此它不直接包含在网站中 我们有几个性能问题,所以我们正在寻找一个“魔术开关”,它可以缩短实现时间和其他缺点 我有一个理论问题: 是否可以在另一个线程中运行实体框架项目(dll),然后再运行网站?我考虑将数据库工作与IIS工作线程分离。或者甚至可以多次运行数据库工作程序(dll)?(我们没有使用缓存,因为它不是内置的,我们也没有找到elegent解决方案。) 提前谢谢 编辑:

我们有一个asp.net网站,它使用实体框架4作为SQL Server的ORM映射器

数据库功能位于编译为DLL的项目中,因此它不直接包含在网站中

我们有几个性能问题,所以我们正在寻找一个“魔术开关”,它可以缩短实现时间和其他缺点

我有一个理论问题:

是否可以在另一个线程中运行实体框架项目(dll),然后再运行网站?我考虑将数据库工作与IIS工作线程分离。或者甚至可以多次运行数据库工作程序(dll)?(我们没有使用缓存,因为它不是内置的,我们也没有找到elegent解决方案。)

提前谢谢

编辑:谢谢你的回答,但我认为我的观点不够清楚。

我正在寻找一种方法,在一个单独的线程中运行数据库功能的DLL(几乎在每个.aspx(.vb)文件中使用)。我不知道如何在另一个线程上运行dll,因为它只是导入而不是“启动”


在创建上下文之前运行一个新线程并在新线程中创建上下文是一种解决方案吗??在我们的解决方案中,上下文与当前httpcontext保持的时间一样长。

线程几乎从来都不是一个“魔术开关”。应用程序通常必须编写为多线程,而试图强制单线程应用程序成为多线程应用程序会导致灾难


我甚至不确定通过多线程来获得什么。对象仍然必须在单个线程上具体化,无论它是主线程还是工作线程,都需要相同的时间。

线程几乎从来都不是“魔术开关”。应用程序通常必须编写为多线程,而试图强制单线程应用程序成为多线程应用程序会导致灾难


我甚至不确定通过多线程来获得什么。对象仍然必须在单个线程上具体化,无论是主线程还是工作线程,都需要相同的时间。

SQL分析是使用EF处理非琐碎查询的必要步骤。

SQL分析是使用EF处理非琐碎查询的必要步骤。

(限制新用户的链接数量-因此多部分回答)

性能(一般) 一些指导

  • 1-依次链接到“探索ADO.NET实体框架的性能” 这解释了几个选项,如编译查询、延迟加载、无跟踪等

    2-一般的做法,如大量内置缓存选项(也许?在某种程度上,这已经足够优雅)和线程工作方式。

    (限制新用户的链接数量-因此是多部分回答)

    性能(一般) 一些指导

  • 1-依次链接到“探索ADO.NET实体框架的性能” 这解释了几个选项,如编译查询、延迟加载、无跟踪等

    2-一般的方法包括大量的内置缓存选项(也许?在某种程度上这已经足够优雅)和处理线程的方法。

    ASP.NET 在ASP.NET Web应用程序中使用实体框架最大限度地提高性能 -

    解释分析生成的查询的几种选项和方法

    实体框架常见问题- 请参见3.2.在实体框架上运行多线程应用程序的建议是什么?实体框架是线程安全的吗

    实体框架与.NET Framework的大多数其他部分一样,基本上不是线程安全的。因此,如果要从多个线程与实体框架或实体类进行交互,则必须仔细注意并发问题。在某些情况下,一个简单的模型是每个线程都要维护自己的上下文当然,这意味着线程之间的交互必须非常有限(例如,如果不十分小心,就不能将实体从一个线程传递到另一个线程),但尽管有这些限制,您仍可以做一些有用的事情。例如,您可以使用MergeOption.NoTracking在一个线程上检索数据,然后将数据分成组,并将其传递给其他线程,这些线程将实体附加到自己的线程上下文中,进行更新,然后保存

    您还可以使用一个线程进行所有数据库交互,并将实体发送到其他线程进行处理,然后返回到数据库线程进行保存。在这种情况下,请确保在其他线程上更新实体时将其从上下文中分离,否则您将以争用条件作为状态nager可以跟踪所有这些更改,因此可以同时从多个线程隐式使用

    ASP.NET 在ASP.NET Web应用程序中使用实体框架最大限度地提高性能 -

    解释分析生成的查询的几种选项和方法

    实体框架常见问题- 请参见3.2.在实体框架上运行多线程应用程序的建议是什么?实体框架是线程安全的吗

    实体框架与.NET Framework的大多数其他部分一样,基本上不是线程安全的。因此,如果要从多个线程与实体框架或实体类进行交互,则必须仔细注意并发问题。在某些情况下,一个简单的模型是每个线程都要维护自己的上下文当然,这意味着线程之间的交互必须非常有限(例如,您不能