2016-09-16 10 views
0

"Get"で始まるすべてのメソッドをキャッシュするのにインターフェイスインターセプタを使用していますが、未知のパラメータごとに一意のキャッシュキーを生成する方法を理解できません私は100%それらがGetHashCodeをオーバーライドしていることを確認することはできませんので、GetHashCodeはオプションではありません。Castle Core Invocationは傍受されたメソッドからキャッシュキーを作成する

var obj = JToken.Parse(jsonString); 
var comparer = new JTokenEqualityComparer(); 
var hashCode = comparer.GetHashCode(obj); 

いくつかの考えは、JSONはその後、上記のリンクで説明したようなハッシュコードを取得するすべてのパラメータをシリアライズ私はJSONに考えていたJOBJECTのために使用されているHow can I create a unique hashcode for a JObject?

のラインでいろいろ書きました

しかし、私はこれがパフォーマンスヒットになると思いますので、どうすればこの問題を解決できますか?

私が持っているコードはこれまでですが、それは文句を言わない.ToStringがintのような生の値タイプを生成しません複合型の状況を処理、文字列など

private string CreateCacheKey(IInvocation invocation) 
{ 
    string className = invocation.TargetType.FullName; 
    string methodName = invocation.Method.Name; 

    var builder = new StringBuilder(100); 
    builder.Append(className); 
    builder.Append("."); 
    builder.Append(methodName); 

    for (int i = 0; i < invocation.Arguments.Length; i++) 
    { 
     var argument = invocation.Arguments[i]; 
     var argumentValue = invocation.GetArgumentValue(i); 
     builder.Append("_"); 
     builder.Append(argument); 

     if (argument != argumentValue) 
     { 
      builder.Append(argumentValue); 
     } 
    } 

    return string.Format("{0}-{1}", this.provider.CacheKey, builder); 
} 

答えて

0

私はとGetHashCodeメソッドを使用して終了キャッシュされないメソッドをオーバーライドしないと実行可能な唯一のソリューションです。

関連する問題