15

私たちが構築しているアプリケーションは、さまざまな種類の電子メールを定期的に送信します。電子メール テンプレートを Azure BLOB ストレージに保存し、電子メールの送信を担当するメソッドがそこから適切な電子メール テンプレートをプルします。更新したい場合に備えて、テンプレートをホストされたサービスの外に置きたいのですが、新しいテンプレートを BLOB にアップロードするだけでそれを行うことができます。

私が抱えている問題は、パフォーマンスとコストの観点から、メール テンプレートが 24 時間以内にめったに変更されないことです。したがって、ASP.NET MVC と同様の方法でメソッドをキャッシュする [OutputCache(Duration = duration, VaryByParam = "id")]ことは、worker ロールのパフォーマンスを向上させるための理想的なソリューションになります。これをどうするかが今の課題です。PostSharpを知ったのですが、当初から PostSharp のライセンス料を考慮した予算ではありませんでした。

他の無料の代替手段はありますか? 助けてくれてありがとう。

4

6 に答える 6

3

PostSharp Starter Edition は無料で、要件を満たします。

于 2013-01-03T09:15:43.940 に答える
2

以下の組み合わせを使用して、過去にメソッド レベルのキャッシュを実装しました。

  1. IoC コンテナーとしてのAutofac
  2. Autofac のMVC3 統合パッケージ
  3. 傍受サポートのための Autofac のDynamicProxy2 (城)統合
  4. キャッシングのサポートが必要なクラスを装飾するためのカスタム属性
  5. メソッドレベルのキャッシュを追加するカスタムインターセプター

カスタム属性とインターセプターの設定は非常に簡単です。メソッド レベル キャッシングの主な問題は、最適かつ正確な方法でキャッシュのヒットとミスを判断する方法だと思います。

私の場合は、汎用的 (あらゆるタイプのメソッド呼び出しとパラメーターをサポートする) である必要があったため、ある呼び出しを別の呼び出しと区別するために、すべてのメソッドのパラメーター値をハッシュする柔軟な方法を作成する必要がありました。しかし、あなたの場合、これは実際には非常に具体的なインターセプターである可能性があり、メソッド呼び出しの構造をすでに知っているため、物事がはるかに簡単になります。

System.Runtime.Caching実際のキャッシングについては、名前空間で利用可能な .NET のキャッシング サポートを利用できます。適切であれば、すでにMemoryCacheが提供されています。

于 2013-01-02T05:04:39.233 に答える
1

SNAPを数回使用しました。無料で、セットアップが非常に簡単で、多数の IoC コンテナーで使用できます。

于 2013-01-02T07:23:07.707 に答える
0

ローカルストレージリソースを使用してテンプレートをストレージから引き出すことを検討しましたか?RoleEntryPointのRunメソッドで間隔を構成できます。

[アップデート]

私は上ではっきりしていなかったかもしれません。テンプレートはBlobStorageに保存する必要があります。ローカルストレージは、サービスの各インスタンスでテンプレートのコピーをローカルにキャッシュするために使用されます。ETagを別のファイルに保存すると、blobを転送する前に、テンプレートが変更されたことを確認できます。

  • welcome.tpl
  • welcome.tag.tpl

RoleEntryPointで、*。tag.tplファイルからetagを読み取ります。If-None-Matchアクセス条件でEtagを渡す条件付きヘッダーを使用して、BLOBストレージに対してリクエストを送信します。BLOBが更新されていない場合は、HTTP 304 Not Modified応答コードが返されます。更新されている場合は、BLOBがダウンロードされます。

[/アップデート]

于 2013-01-02T01:44:27.640 に答える
0

KingAOP の使用を試すことができます - そのようなタスクには簡単です。主な違いは次のとおりです
。1) 追加のコンパイル時間を無駄にすることなく、実行時にコードを生成します。
2) 「動的」に基づく - コードが公式の C# コンパイラによって生成されることを意味します。

これはオープン ソース プロジェクトです: https://github.com/AntyaDev/KingAOP

記事をご覧ください:
http://www.codeproject.com/Tips/624586/Introducing-the-KingAOP-Framework-Part-1

于 2013-12-13T12:04:10.100 に答える
0

AOP 機能だけが必要な場合は、Ninject Interception などを使用できます。

http://codepyre.com/2010/03/using-ninject-extensions-interception-part-1-the-basics/

于 2013-01-03T09:19:28.267 に答える