Silverlightの速度が低下するのはなぜですか?

「Silverlightの速度が低下する理由」という質問は、特にSilverlightテクノロジを使用してソリューションを開発している場合によく聞かれます。 多くの場合、入札に勝つことも、アプリケーションでSilverlightテクノロジーを使用するように顧客を説得することもできません。なぜなら、彼はすべてのSilverlightアプリケーションが遅いと考える人気をすでに得ているからです。 この問題について議論してみましょう。



SQL.RUを使用した例





最近、私はWPFスレッド、Silverlightフォーラムhttp://sql.ruの投稿を見始めました。そこで、MVVMフレームワークの使用に関する推奨を示し(私の位置はわかっています )、この質問にぶつかりました



しかし、このサイトのリンクの1つで、触れていないときにプロセッサが何をするのか教えてくれませんか? 前提は何ですか?




余談:一般に、sql.ruフォーラムの印象は、どのスレッドでも、Silverlightが優れているかどうかについての愚かな洪水が始まるようなものです。



そのため、まさにアプリケーションhttp://surfity.com/#/Imagesについて。 実際、検索に何かを入力して[検索]ボタンをクリックすると、検索自体の後に次の画像が表示されます。



Capture



ダウンタイムの間、アプリケーションはプロセッサをほぼ完全に使用し続けます。 バックグラウンドで何かをします。 このようなアプリケーションの永続化により、すべてが少し遅くなることは明らかです。 この場合、なぜこのような問題なのか、私は答えを出すことができません。 しかし、私が作成したのではなく、開発者なら誰でも認めることができる同様のバグを解決したら



私たちのチームの例





アイデアはシンプルでした。 Syncfusionコントロールを使用して描かれたチャートがありました(私のお気に入りのコントロール 、今回はそれが私たちのものでした)。 タスクは、通常の縦棒グラフに線(ターゲットラインタイプ:「良い」が「悪い」に変わる場所を示す赤い線)を表示することでした。 このようなものは次のように見えました。



Capture2



この場合、Chartコントロールは座標軸に必要なグラデーションを計算し、値コレクションに存在する最大値と最小値に応じて、軸の最大値と最小値を設定します。 写真では、約70〜80です。さらに、たとえば、開発者はターゲットラインが78であることを知っています。縦座標軸にそのような値があるかどうかを確認し、ある場合は線を引きます。 明らかに、彼は「チャートが作成されて準備ができている」など、チャートコントロールからのある種のイベントを必要とします。 1つのオプションは、チャートが描画された後に呼び出されるLayoutUpdatedイベントをサブスクライブすることです。



public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); Chart.LayoutUpdated += new EventHandler(Chart_LayoutUpdated); } void Chart_LayoutUpdated(object sender, EventArgs e) { // Draw line... } }
      
      







Chart_LayoutUpdatedメソッドで、Chartコントロールに行を追加します。 すべてが単純なようです。 実装後、すべてが正常に機能することを確認します。 ソースコードをTFSに送信します。 問題が発生しましたか? すぐに気づく人は多くないと思います。



多くのテストを行った後、アプリケーションを受け取った人は、「すべては問題ありませんが、アプリケーション全体が遅くなります。どうにかしてこれをSilverlightに高速化できますか?」と言います。 「これはノートブックではなくビジネスアプリケーションであり、機能するため速度が低下することは明らかです」などの標準的な回答が用意されていることは明らかです。しかし、これは私の場合ではなく、開発時からパフォーマンスの問題を解決するのが大好きですC ++では、彼らが図面を描くアプリケーションを作成し、40秒ではなくデバッグの下で構築されたアプリケーションが10で図面を描き始めたとき(1秒でリリース)、私は本当の話題を経験しました。 したがって、私は何ができるかを見ようとすると答えました。 まず、アプリケーションを開いて、長く一生懸命に作業を開始しました。深刻なメモリリークは見られず、150〜200 MBを消費し、そのフレームワーク内にとどまりました。 しかし、何もしなかった場合、画面の1つにあるアプリケーションはプロセッサの30〜40%を消費し続けますが、他の5%は処理し続けることに気付きました。 Silverlight Spyアプリケーションがあり、それを使用してアプリケーションの分析を開始し、イベントモニターでこの非常に問題のある画面で、イベントLayoutUpdatedが周期的かつ絶えず呼び出されることを確認できました。 その後、このコードとこの問題に精通しました。 もちろん、グラフが描画されてLayoutUpdatedイベントが発生した後、別の要素をコントロールに追加します。もちろん、同じイベントLayoutUpdatedが再び呼び出されます。



長期間動作するように、アプリケーションをどのくらいの頻度でテストしますか? アプリケーションの動作を確認するために、単純なタスクマネージャーでもどれくらいの頻度で開きますか?



結論





開発者がこのプラットフォームを部分的に禁止したことは明らかです。 また、Silverlight開発チームには、多くの問題があります。コアと基本的なSilverlightコントロールで見つかっメモリリークの量のみを確認できます。 しかしそれにもかかわらず、彼らはこれらのメモリリークを発見し、実際のSilverlight開発者はこれに非常に綿密にアプローチし、結果として優れたソリューションをリリースします。



それでは、なぜSilverlightアプリケーションが遅くなるのですか? このテクノロジーにより、Web開発者は初心者からグルまでWebアプリケーションを作成できます。使いやすい開発環境、非常にシンプルな開発言語、膨大な量の参照資料です。 初心者のデベロッパーを連れて、Html + JavaScriptまたはFlashでWebアプリケーションを作成するように依頼することはできますか? 私は、小さなおもちゃやバナーではなく、ビジネスアプリケーション、百科事典サイトについて話している。 私は、答えの90%が「いいえ」であると自信を持って答えています。



したがって、将来、Silverlightでのソリューションの開発に注力する場合は、以下を検討してください。







そして、抑制の少ないアプリケーションを作成しましょう ウインク笑顔



PS質問が確実に表示されることは間違いありません。「Silverlightで通常のアプリケーションを表示する」。 私はそのような人を知らないとすぐに答えます。 私たちのアプリケーションは、原則としてうまく動作し、顧客は満足し、パフォーマンスに関する問題を発生時に解決します。 イントラネットアプリケーションであるため、表示できません。



All Articles