【问题标题】:WCF Data Services: Call to SaveChanges() causes 100% CPUWCF 数据服务:调用 SaveChanges() 导致 100% CPU
【发布时间】:2011-12-01 00:02:23
【问题描述】:

我正在基于 Entity Framework 4.0 数据模型开发 WCF 数据服务,但在当前情况下我们无法进入生产环境。

我的客户端应用程序正在添加和修改大量对象,大约 100,000 个。然后它调用服务的 SaveChanges 方法以将所有更改保留在单个操作中。 WCF 数据服务托管在 NServiceBus 主机进程中,但我不知道这是否会导致问题。

这可行,但在 1-CPU、4GB RAM、Win2008 x64 虚拟机上需要一个多小时。更重要的是,CPU 利用率高达 100%。 RAM 消耗在 75% 和 85% 之间波动。这是在开发环境虚拟机中,因此服务覆盖的 SQL Server 2005 数据库是本地的。 WCF 数据服务的主机进程在此过程中消耗了大约 1.2 GB。

有什么想法吗??非常感谢!

【问题讨论】:

  • 内存消耗很容易计算。但是你有没有看过哪个服务如此严重地消耗 CPU 时间?
  • 我以为是 WCF 数据服务的主机进程占用了时间,但事实并非如此…… WCF 数据服务实际上托管在 IIS 中,它是托管的客户端在 NServiceBus 主机进程中。因此,几乎所有时间都由客户端占用(同样,在 CPU 时间的 85% 和 98% 之间波动)。
  • 分析您的应用程序。这是任何性能问题的第一步。

标签: entity-framework nservicebus wcf-data-services


【解决方案1】:

您真的需要在一个事务中修改所有对象吗?如果不是,那么我建议尽快打开数据上下文。

  • 打开数据上下文
  • 更新对象
  • 保存更改
  • 关闭数据上下文

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多