3

データ グリッドにアーキテクチャ上の問題があります。グリッドは、上記のすべてのパラメーターを含む linq2entity クエリを使用した検索、ページング、および並べ替えをサポートしています。

一部のページでは、グリッドはデータベースからのコンテンツ (列「名前」など) を表示するのではなく、リソース プロバイダーによってロードされた翻訳済みのリソースを表示する必要があります。

当社のリソース プロバイダーは、データベースから翻訳を取得し、アプリケーション キャッシュにキャッシュして、データベースへの不要なトリップを回避します。

この時点で、次の可能性があります。

  1. データベースで検索、並べ替え、ページングを行わないため、すべての行を読み込み、リソース プロバイダーから翻訳を読み込み、アプリケーションで検索、並べ替え、ページングを行います。
    データベースが非常に大きいため、パフォーマンスが悪い

  2. データベースで検索、並べ替え、ページングを行い、結果のリソースを読み込みます。
    表示される値は、検索および並べ替えの構成と一致しません

  3. linq クエリ内でデータベースからリソースを直接取得します。
    リソース プロバイダーのキャッシュは使用できません。リソース プロバイダー テキストとの結合は非常に悪く、遅くなります。

すべての可能性は非常に悪いですが、別の解決策は考えられません。良い提案はありますか?これらの問題は、他のソフトウェアではどのように解決されていますか?

4

2 に答える 2

3

関連するフィルター処理されたレコードをデータベースから取得し、ViewState.

どうすればパフォーマンスを改善できますか?

JSON / Page Methodsを利用できますDatabase Callings。例を使って説明します。

ここをクリックして、JSON を使用した GridView バインディングのコードを確認します

JSON でマークアップ

ここに画像の説明を入力

クライアント側からコードビハインドメソッドを呼び出しています


コードビハインド

ここに画像の説明を入力

出力

ここに画像の説明を入力

更新パネルの場合の出力を確認するには、ここをクリックしてください





アプリケーションが保持しているメモリが多すぎる場合は、Red Gate Ants Memory Profiler のような Doctor が必要です。詳細については、ここをクリックしてください。

ここに画像の説明を入力


Usingステートメントを使用して回避するようにしてくださいMemory Out of Exceptions

using (SqlConnection connection = new SqlConnection()) 
{     
      connection.Open();  
      //Also for SqlCommand... Sample code...
      using (SqlCommand cmd = new SqlCommand()) 
      { 
      }    
      using (SqlTransaction transaction = connection.BeginTransaction())     
      {         
            transaction.Commit();     
      } 
} 

について知っていTeleric Gridますか?最初にデータベースからすべてのレコードをロードし、Cache. これを行うには、使用する必要がPagingありDisposing、オブジェクトは必須です。Teleric Gridにこれらのレコードを示しますPaging。したがって、レンダリングの問題を回避して、すべてのレコードを一度に表示することを回避できます。

于 2012-07-26T20:46:53.450 に答える
2

私はあなたの質問を正しく理解していませんが、翻訳されたリソースに対するすべての操作が必要な場合は、翻訳されたリソースをデータベースに保存してから、それらをセッションオブジェクトに取得し、テーブルまたはリストの形式の場合はそれにフィルターを適用してから与える必要がありますセッションオブジェクトからフィルタリングされた翻訳されたリソースと連携するように構成する必要があるソースからグリッドへ。

于 2012-07-26T11:14:44.103 に答える