SQL.RUを使用した例
最近、私はWPFスレッド、Silverlightフォーラムhttp://sql.ruの投稿を見始めました。そこで、MVVMフレームワークの使用に関する推奨を示し(私の位置はわかっています )、この質問にぶつかりました :
しかし、このサイトのリンクの1つで、触れていないときにプロセッサが何をするのか教えてくれませんか? 前提は何ですか?
余談:一般に、sql.ruフォーラムの印象は、どのスレッドでも、Silverlightが優れているかどうかについての愚かな洪水が始まるようなものです。
そのため、まさにアプリケーションhttp://surfity.com/#/Imagesについて。 実際、検索に何かを入力して[検索]ボタンをクリックすると、検索自体の後に次の画像が表示されます。
ダウンタイムの間、アプリケーションはプロセッサをほぼ完全に使用し続けます。 バックグラウンドで何かをします。 このようなアプリケーションの永続化により、すべてが少し遅くなることは明らかです。 この場合、なぜこのような問題なのか、私は答えを出すことができません。 しかし、私が作成したのではなく、開発者なら誰でも認めることができる同様のバグを解決したら
私たちのチームの例
アイデアはシンプルでした。 Syncfusionコントロールを使用して描かれたチャートがありました(私のお気に入りのコントロール 、今回はそれが私たちのものでした)。 タスクは、通常の縦棒グラフに線(ターゲットラインタイプ:「良い」が「悪い」に変わる場所を示す赤い線)を表示することでした。 このようなものは次のように見えました。
この場合、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で通常のアプリケーションを表示する」。 私はそのような人を知らないとすぐに答えます。 私たちのアプリケーションは、原則としてうまく動作し、顧客は満足し、パフォーマンスに関する問題を発生時に解決します。 イントラネットアプリケーションであるため、表示できません。