1

考虑以下 MemberExpressions

someObject.someMethod(p => p.FirstName)
someObject.someMethod(p => p.Contact.Address.City)

我正在编写一些代码来遍历表达式并查看每个成员以确定它是否用给定的属性装饰。这样做的目的是生成一个“路径”,如下所示:

p.Contact.Address.City -> "Contact.Address.City"

但如果它用特定属性装饰,则路径将使用不同的名称生成:

...
[BsonElement("Locale")]
public string City {get; set;}
...

p.Contact.Address.City -> "Contact.Address.Locale"

仅供参考:这是我为使用 MongoDB 编写的一个小型库

因此,遍历表达式并检查属性是使用反射完成的。它不是很慢,但还有改进的余地。

我想为路径解析添加一些缓存(将成员表达式转换为字符串),但我不确定为成员表达式生成签名\哈希的最佳\最有效方法。

我尝试了一些东西,但它们实际上减慢了代码的速度。这种方法需要足够快,以便每次都生成哈希,以便它可以用于查找,并且显然必须比遍历表达式更快。

有什么想法吗?

编辑:代码在这里:https ://github.com/bryanmig/MongoFluentUpdater/blob/master/FluentUpdate/FluentUpdater.cs (我知道还有改进的余地,但它是一个早期的原型)

4

1 回答 1

0

您总是希望缓存反射工作的结果,因为在代码运行时没有任何结果会改变(除非您进行大量动态程序集加载/生成)。您可以分享遍历表达式的代码吗?这可能会使您更容易看到需要在哪里合并缓存。

于 2012-05-05T00:53:22.890 回答