【问题标题】:Optimizing WCF NetNamedPipeBinding performance优化 WCF NetNamedPipeBinding 性能
【发布时间】:2016-04-04 15:57:32
【问题描述】:

我有一个 WCF 命名管道服务,它接收一个字节数组并将其写入 SQLite DB。 当我将 SQLite 插入逻辑移到 WCF 服务中时,写入性能几乎下降了一半。 我在网上浏览了各种推荐,但似乎没有任何帮助。 我当前的配置如下所示:

 pipeBinding.MaxBufferPoolSize = 5000000;
 pipeBinding.MaxBufferSize = 5000000;
 pipeBinding.MaxReceivedMessageSize = 5000000;
 pipeBinding.ReaderQuotas.MaxArrayLength = 5000000;
 pipeBinding.Security.Transport.ProtectionLevel = ProtectionLevel.None;             

欢迎更多调整建议。

【问题讨论】:

  • 你的服务是PerSession吗? PerCall?您是否使用相同的客户端代理重复调用服务?您是否在服务方法开始时启动数据库连接?如果是这样,请考虑将您的服务设为PerSession 并将数据库连接初始化移动到您的服务构造函数中,以便在给定代理的调用中使用它
  • 它有一个非默认构造函数,所以它不能是 PerSession。我已经配置了 behavior.InstanceContextMode = InstanceContextMode.Single;它确实有助于创建单个数据库实例。我也在考虑编写自己的序列化。也许跳过 base64 阶段会有所帮助

标签: performance wcf wcf-binding netnamedpipebinding


【解决方案1】:

使用 protobuf 有助于提高速度,但最耗时的操作是对 SQLite 表的求和操作,因此我更改了数据库的结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2016-05-14
    相关资源
    最近更新 更多