2013-01-02 8 views
8

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

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

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

+0

私は何かが足りないかもしれないが、私はなぜあなたはpostsharpは、あなたがこれを解決するのに役立つと思います」頼みますよ問題?" – JerKimball

+0

PostSharpを実行可能なオプションと示唆するスレッドがあります(http://stackoverflow.com/questions/4929540/is-there-anyway-to-cache-function-method-in-c-sharp)。私はネットを検索しました。あなたが他の選択肢を持っているなら、それを感謝します。 – olatunjee

+0

さて、私は今、あなたがAOPのために使用したいと思っています。あなたのキャッシングロジックはあなたの "クロスカッティングの懸念"です。ええ、PostSharpはここで実行可能な解決策かもしれません。しかし、私はフリーウェアの代替案を知らない。 Lemmeは少し周りを突き進む。 – JerKimball

答えて

3

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

+12

プロジェクトごとに最大10クラスの制限を超えていました。 – Carra

0

local storage resourcesを使用してテンプレートをストレージから取り出してみましたか?間隔の方法をRoleEntryPointに設定することができます。

[更新]

私は上記の明確されていない可能性があります。テンプレートはBlob Storageに保存する必要があります。ローカルストレージは、サービスの各インスタンスにテンプレートのコピーをローカルにキャッシュするために使用されます。で

welcome.tag.tpl

  • welcome.tpl

    • :あなたは別のファイル内のETagを保存する場合、これはあなたがテンプレートがブロブつまりを転送する前に変更されたことを確認することができますRoleEntryPoint、* .tag.tplファイルからetagを読み込みます。 conditional headersのBLOBストレージに対するリクエストをEtagIf-None-Matchに渡して送信してください。ブロブが更新されていない場合は、HTTP 304 Not Modified応答コードが返されます。更新された場合は、ブロブがダウンロードされます。

      [/更新]私は以下の組み合わせで使用して、過去にメソッド・レベルのキャッシュを実装している

  • +0

    ありがとうございます。テンプレートを更新/変更する必要があるときは、ローカルストレージを選択してアプリケーションを再デプロイする必要があります。私たちはこれを避けようとしています。 – olatunjee

    +0

    blobストレージにテンプレートを格納しますが、RoleEntryPointはlocalstorageにあるキャッシュされたコピーを最新の状態に保ちます。 blobストレージ内のテンプレートに対する更新は、スレッドがRunメソッドで起動し、コードが実行されてローカルストレージ内のコピーを上書きするとすぐに更新されます。 –

    1

    1. Autofac IoCコンテナ
    2. AutofacのMVC3 integrationパッケージ
    3. AutofacのDynamicProxy2 (castle)統合のようにインターセプトサポート
    4. キャッシングをサポートするクラスを装飾するカスタム属性
    5. カスタムインターセプタは

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

    私の場合は、ジェネリック(メソッド呼び出しとパラメータの任意の型をサポートする)が必要でした。したがって、呼び出しを区別するためにすべてのメソッドパラメータ値をハッシュする柔軟な方法を作成しなければなりませんでした。しかし、あなたのケースでは、これは実際に非常に特殊なインターセプタである可能性があります。これはすでに、メソッド呼び出しの構造を知っています。

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

    +0

    ありがとうございます。それを確認する。 – olatunjee

    +0

    もう一つの選択肢は[NCop](https://github.com/sagifogel/NCop)です。ポストシャープに触発された複合アスペクト指向のフレームワークです。 – Sagi

    1

    私はSNAPを数回使用しました。これは無料で、多数のIoCコンテナでセットアップして使用するのがとても簡単です。

    0

    あなたはKingAOPを使用しようとすることができます。主な違いは次のとおりです。
    1)コンパイル時間を無駄にせずに実行時にコードを生成します。
    2) "動的"に基づいて - あなたのコードが公式のC#コンパイラを介して生成されることを意味します。

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

    が記事を探してください:
    http://www.codeproject.com/Tips/624586/Introducing-the-KingAOP-Framework-Part-1