0

カスタムメイドの ERP アプリケーションを 4 年以上使用していますが、実際には、アプリケーションのパフォーマンスに影響を与える設計上の問題がいくつかありました。

実際問題は、このアプリケーションがヘビーデータ アプリケーション、つまりビジネス アプリケーションに分類されることです。

最大の悪い設計上の問題は、特定のビジネス ユニットのデータ全体を取得し、それをコントロールに割り当てたり、メモリ (ArrayLists、Generic Lists など) に保持したりして、ユーザーにナビゲーションと完全なアプリケーションの柔軟性を与えることです。スピードレスポンス。

最初の 2 年間の使用では問題に気づきませんでしたが、その期間の終わりまでに、アプリケーションのパフォーマンスに関する苦情がますます増えています。

CRUD 操作 (Get、List、Delete、Insert、Update SP) 用に生成されるストアド プロシージャを使用して、ADO.NET を使用していました。データ アクセス レイヤーに必要な変更を加えて生成された SP であり、レイヤーに実際の分離がなかったという事実により、その変更を行うのは簡単な手段ではありません。したがって、最初の解決策は、バランスを取るためにいくつかのデータベース強化を行うことです。この膨大なデータ トラフィックが発生しますが、この問題は約 6 か月間再発します。

ですから、今こそ間違いを正すときだと思います (非常に遅い決定です)。最終的には次の解決策が得られます。

  • Windows アプリケーションではなく Web アプリケーションを使用することで、サーバーの能力を最大限に活用し、接続のトラフィックを最小限に抑えることができます。

  • アプリケーションを再設計して、年末を処理し、すべてのデータを取得せず、古い Fusion ADO.NET よりも優れた ORM を使用するが、Windows フォームに固執し、同じアプリケーションを使用する

時間枠 (ある程度制限されています)、チーム メンバー (2 名、どちらも Windows と Web 開発の経験が豊富です) によると、今すぐ決定を下すことはできません。予想以上の時間。

私にアドバイスできますか?

C# 4.0、ASP.NET Web フォーム (MVC 初心者) を使用しています。

4

1 に答える 1

2

私のコメントへの回答で示したように、データベース自体が高速である場合は、提案したように、DataSetに入力されるデータの量を減らす必要があります。

ADO.NETは「切断された」モデルを使用しますが、開発者は、DataSet内の各テーブル/リレーションにデータを入力するために使用されるselect-queryを引き続き制御できます。架空の例:データベースのCUSTOMERSテーブルに5000人の顧客がいるとします。次のように、DataSetにCUSTOMERSテーブルを設定できます。

             select * from CUSTOMERS order by customername

またはこのように:

            select id, customername from CUSTOMERS order by customername

order-headersテーブルは、次のように入力できます。

            create proc getOrderHeaders4Customer
            @customerid int
            as
            select * from ORDERHEADER where customerid = @customerid

つまり、OrderHeadersリレーションを設定する前に、GUIに現在の顧客がいる必要があり、ユーザーがGUIで特定の注文ヘッダーをクリックした場合にのみ注文詳細データを取得します。重要なのは、ADO.NETを使用してこれを行うことができるということです。切断されたデータセットをより節約するために、アプリ内のすべてを放棄する必要はありません。

クライアントによってフェッチされるデータの量、さらに重要なことに、データがクライアントによってフェッチされるときは、Silverlight、WinForms、またはASP.NETのいずれであるかに関係なく、完全に開発者の管理下にあります。さて、ERPアプリケーションが効率的でなかった場合、効率を後付けするのは難しいかもしれません。ただし、効率を上げるためにADO.NETを放棄する必要はありません。また、別のデータレイヤーテクノロジを選択するだけでは、効率は向上しません。

于 2011-07-03T16:02:53.367 に答える