首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法让wpf + wcf更快地工作?

有没有办法让wpf + wcf更快地工作?
EN

Stack Overflow用户
提问于 2013-12-18 20:47:38
回答 1查看 437关注 0票数 0

在使用WPF服务开发WCF应用程序时,我意识到有时应用程序非常慢。例如,当我从WCF服务调用一个返回列表的方法时,执行它需要花费太多的时间。以下是一些代码:

MVVM:

代码语言:javascript
复制
private ObservableCollection<tblStock> _Stocks;
public ObservableCollection<tblStock> Stocks
{
   get
   {
      return _Stocks;
   }
   set
   {               
      _Stocks = value;
      OnPropertyChanged("Stocks");
   }
}

private ObservableCollection<tblClient> _Clients;
public ObservableCollection<tblClient> Clients
{
   get
   {
      return _Clients;
   }
   set
   {                
      _Clients = value;
      OnPropertyChanged("Clients");
   }
}

当我打开一个窗口时,有两个组合框绑定在这些属性上。这些属性在我的视图模型类的构造函数中设置如下:

代码语言:javascript
复制
Clients = new ObservableCollection<tblClient>(wcf.GetClients());
Stocks = new ObservableCollection<tblStock>(wcf.GetStocks());    

当窗口打开时,装载这些组合框需要大约7-10秒。我不明白为什么当列表数量很小的时候需要这么多的时间:2和8项。以下是wcf服务的方法:

代码语言:javascript
复制
List<tblClient> IService.GetClients()
{
   context = new PanErpLiteEntities();
   List<tblClient> cntnt = (from c in context.tblClients select c).ToList();
   return cntnt;
}

因此,我的实际问题是:减慢我的申请的可能原因是什么?我贴出这个问题是因为我很难在google上找到答案,因为有数以百万计的原因导致应用程序工作缓慢,所以我来这里实际上是为了技巧。我希望我说得够清楚了。

EN

回答 1

Stack Overflow用户

发布于 2013-12-18 21:04:39

你在谷歌上发现了一百万件东西,因为可能有一百万件事情会导致缓慢。您需要做的是学习如何确定慢度在哪里,也就是“剖析”。

在你的情况下,有三件事你需要描述。

  • 客户端程序挂起的地方
  • WCF请求的时间和跨线回复所需的时间
  • List<tblClient> IService.GetClients()花的时间最多的地方。

对于第一和第三项,您需要一个代码分析器。有一个内置到中,也有很多也提供免费和付费第三方服务。

对于第二项您可以启用WCF本身的跟踪,它可以简单地添加以下内容到您的App.config文件在服务器上。

代码语言:javascript
复制
<system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\log\Traces.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

接下来关闭服务器时,您可以在visual附带的“服务跟踪查看器”中查看Traces.svclog (您还可以启用autoFlush,不需要等待停止该服务来刷新缓冲区,但这将给您带来性能影响)。

一旦您掌握了所有这些新信息,您就可以回到这里,提出一个新的问题,比如“如何使WCF服务器更快地完成第一个请求?”或者“为什么这个实体框架查询要花这么长时间”或者其他什么东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20668063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档