"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);
}