2011-01-30 6 views
0

多くの契約があるサービスへのWCFサービスリファレンスを持つSilverlight 4アプリケーションを実行しています。Silverlight 4のWCFスタートアップのパフォーマンス

スタートアップのパフォーマンスがひどいので、プロファイリングして、最初のWCF呼び出しでシリアル化コードを生成するのに7秒かかることがわかりました。

startup profile

私はXmlSerializerを(explained here)を使用して、起動時間を改善する方法が存在しているはず。これは、事前に別のアセンブリにシリアル化コードを生成することによって行われますが、Silverlightでこれを行う方法を理解できないようです。

誰もこれまでに行ったことはありますか?それも可能ですか?助けてくれる他のアイデアも大歓迎です。

ありがとうございました。

答えて

0

Advanced Developer Extensionsを使用すると、WCF参照を追加するときと同じ起動時のパフォーマンスの問題は発生しません。

0

svcutil.exeを使用してクラスを事前に生成する方法について説明していますが、Visual StudioまたはWCF RIA Servicesの[サービス参照の追加]ダイアログボックスを使用している場合は、すでにあなたのために行われています。だからこそ、私はパフォーマンスの向上を求めていません。とにかくあなたがスピンアップしようとしている何千もの異なるクラスを持っていない限り、7秒は長すぎるようです。私の強い疑念は、あなたが全く別の問題を抱えていることです。 7秒かかるすべての操作は、アルゴリズムまたはIOのいずれかにバインドされます。 WCFサービスに到達する際のネットワークI/O、またはWCFサービスからI/Oが可能であれば、それ自身のデータソースへのI/Oです。何らかの種類のスニッファ(Wireshark、Firebug、それらの行に沿ったもの)をロードして、ネットワーク上で何が起こっているのかをよく見てください。それはどこからでも始めることができます。

+0

私はそれが逐次化コードだと肯定的です。このコード行を実行すると、新しいXmlSerializer(typeof(Request))が7秒かかります。 Requestクラスには約100個のXmlIncludeAttributeが定義されています。したがって、Requestクラスのシリアライゼーションコードを生成することは、100の他のクラスのコードを生成することを意味します。 私はSilverlightでsgen.exeを使用する方法を本当に探しています。 –

+0

良い点。私は思ったほどシリアライズについてはあまり知らなかったことが分かります。しかし、掘り下げた後、DataContractSerializerの代わりにWCFコントラクトでXmlSerializerを使用している理由はありますか? DCSは、おそらくXmlSerializerの起動時の問題を回避するように最適化されています。 –

+0

良い提案しかし、私はそれを試みたと私はそれが動作するとは思わない。 DataContractSerializerはより厳密なルールを持つようですので、slsvcutil.exe/serializerを使用してサービス参照を生成しようとします。DataContractSerializer ...これと同じ種類の失敗が発生します - http://stackoverflow.com/questions/906082/problem-with-generating-webservice-proxy-using-svcutil –

関連する問題