0

パフォーマンスを向上させるために、DevExpress TdxMemDatasetにいくつかのインデックスを追加しています。TdxMemIndexには、soCaseInsensitiveのオプションを含むSortOptionsがあります。私のデータは通常 GUID 文字列であるため、大文字と小文字は区別されません。すべてのデータを同じケースに強制する方が良いのか、それとも soCaseInsensitiveフラグを使用して Locate の呼び出しでloCaseInsensitiveフラグを使用すると、パフォーマンスがわずかに低下するだけなのか (毎回文字列の大文字と小文字を変換するのとほぼ同じ)、疑問に思っています。インデックスを使用する必要があります)。

この時点で、CaseInsentive をオフのままにして、大文字と小文字を変換するだけです。

4

2 に答える 2

8

私見、投稿時にデータ品質を保証するのが最善です。理由:

  1. あなたは (通常) データの性質を知っています。だから、例えば。TdxMemDataSet のような一般的なコンポーネントが強制的に使用する非常に遅い AnsiUpperCaseの代わりに、UpperCase を使用できます (GUID はすべて ASCII の範囲内にあることがわかっています) 。

  2. データを入力するのは 1 回だけです。TdxMemDataSet の内部の上位キャッシング エンジンを意味する検索/並べ替え/フィルタリングは、繰り返されるアクションです。また、気付かないうちにこのエンジンをトリガーする連鎖アクションが他にもあります。(たとえば、デフォルトでソートされている TcxGrid は、GridMode:=True (DevEx. コンポーネントを使用していると仮定します) を持ち、ソート メッセージを基になるデータセットに渡すブローカーのように機能するクラスを持ちます。

  3. 通常、データ入力は段階的に行われ、1 回のバッチで 1 つまたはいくつかのレコードが行われます。唯一の注目すべき例外は、データ取得アプリケーションです。しかし、どちらの場合も、ユーザーの使いやすさの文化を超えると、応答時間が大幅に長くなります(IOW 0.005 ミリ秒続くレコード ポストに UpperCase 呼び出しを追加するのはどのくらいですか?) OTOH、ユーザーはデータ取得操作 (検索、並べ替え、フィルタリングなど) の速度を非常に要求しています。データの取得はできるだけ速く行ってください。

  4. データベース内のデータを公開する準備ができていると、他のモジュールを作成する場合(作成する場合) に処理エラーのリスクが軽減されます(作成する言語のモジュールのデータを AnsiUpperCase に覚えておく必要があります)。また、ここでの古典的な例は、他の外部ツールを使用してデータにアクセスする場合です (たとえば、データベース マネージャーがデータに対して SQL SELCT を実行する場合)。

h番目。

于 2009-03-16T17:47:06.873 に答える
1

おそらく、DevExpress フォーラム (または、アクセスできる場合はサポート メール) は、そのパフォーマンスに関する質問に対する信頼できる回答を探すのに適した場所です。

とにかく、データを保存した瞬間に、データが必要な形式であることを保証することをお勧めします-理由はすでに説明しました。したがって、その特定では、GUIDが大文字(または小文字、好みの問題)で記述されていることを確認してください。guidデータ型を持つSQL Serverまたは別のデータベースサーバーである場合は、SELECTが機能することを確認してください-適用可能かつ可能であれば、並べ替えも.

于 2009-03-16T18:49:39.640 に答える