ASP.NET Web サイトの一部として、ローカリゼーション/テキスト翻訳は、ResX ファイルではなく、SQL データベースに保存されたテキストを使用して処理されます。なぜこのように行われるのかはレガシーにかかっていますが、それは私たちがしていることですが、かなり簡単に変更を加えることができます. テキストは次のようにテーブルに格納されます。
CREATE TABLE [Text](
[TextID] [int] NOT NULL,
[LanguageID] [int] NOT NULL,
[Text] [nvarchar](max) NULL
)
CONSTRAINT [PK_Text] PRIMARY KEY CLUSTERED
(
[TextID] ASC,
[LanguageID] ASC
)
また、Web サイトのコード ビハインドは、選択した言語のテキスト ID を参照して、正しいテキストをラベルなどの HTML 要素に割り当てます。
利用可能なテキストが非常に多く、ページを翻訳するためだけに各ページ要求でデータベースをヒットするのは非常に遅いため、実際に行うことは、アプリケーションの起動時にHttpApplicationStateを使用して、そのテーブル内のすべてのテキストをサーバー メモリにキャッシュすることです。
現在の問題は、いくつかの Web サーバーが負荷分散されているため、静的キャッシュの更新が難しくなっていることです。加えられた変更が表示される前に、アプリケーション プールがリサイクルされるのを待つ必要があります。また、上記のリンクが示唆するように:
...アプリケーション状態で大きなデータ ブロックを格納すると、サーバー メモリがいっぱいになり、サーバーがメモリをディスクにページングする可能性があります。
それで、私が知りたいのは、他にどのような解決策を使用できるかということです? パフォーマンスを向上させるために、このすべてのテキストをキャッシュできる必要がありますが、1 日に 1 回以上定期的に更新できるようにする必要があり、複数のサーバー間でこのキャッシュを管理できる必要もあります。