在使用WPF服务开发WCF应用程序时,我意识到有时应用程序非常慢。例如,当我从WCF服务调用一个返回列表的方法时,执行它需要花费太多的时间。以下是一些代码:
MVVM:
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");
}
}当我打开一个窗口时,有两个组合框绑定在这些属性上。这些属性在我的视图模型类的构造函数中设置如下:
Clients = new ObservableCollection<tblClient>(wcf.GetClients());
Stocks = new ObservableCollection<tblStock>(wcf.GetStocks()); 当窗口打开时,装载这些组合框需要大约7-10秒。我不明白为什么当列表数量很小的时候需要这么多的时间:2和8项。以下是wcf服务的方法:
List<tblClient> IService.GetClients()
{
context = new PanErpLiteEntities();
List<tblClient> cntnt = (from c in context.tblClients select c).ToList();
return cntnt;
}因此,我的实际问题是:减慢我的申请的可能原因是什么?我贴出这个问题是因为我很难在google上找到答案,因为有数以百万计的原因导致应用程序工作缓慢,所以我来这里实际上是为了技巧。我希望我说得够清楚了。
发布于 2013-12-18 21:04:39
你在谷歌上发现了一百万件东西,因为可能有一百万件事情会导致缓慢。您需要做的是学习如何确定慢度在哪里,也就是“剖析”。
在你的情况下,有三件事你需要描述。
List<tblClient> IService.GetClients()花的时间最多的地方。对于第一和第三项,您需要一个代码分析器。有一个内置到中,也有很多也提供免费和付费第三方服务。。
对于第二项您可以启用WCF本身的跟踪,它可以简单地添加以下内容到您的App.config文件在服务器上。
<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服务器更快地完成第一个请求?”或者“为什么这个实体框架查询要花这么长时间”或者其他什么东西。
https://stackoverflow.com/questions/20668063
复制相似问题