如何在C#中缓存反射

发布于 2024-11-01 15:11:28 字数 195 浏览 1 评论 0原文

你好呀 我对反射非常熟悉,我已经看过大量示例,我知道它是如何工作的以及我们可以使用它的目的。但我没有得到任何缓存反射的例子,我也不知道这是什么意思。不知何故,我必须在我正在做的项目中使用反射缓存。

因此,如果有人可以简要解释这个概念并给出一些示例,我将不胜感激,也将不胜感激现有示例的链接。并请描述属性的反射及其缓存。提前致谢。

问候 乌迈尔

Hello there
I am familiar with reflection quite a bit, I have been through loads of examples and I know how it works and for what purpose we can use it. But I didn't get any examples of caching the reflection, neither do I know what does it mean. And somehow I have to use caching of reflection in of the projects that I am doing.

Therefore, I would be obliged if some one can briefly explain this concept as well as give some examples of it, a link to existing examples would also be appreciated. And please also describe the reflection of attributes as well as its caching. Thanks in advance.

Regards
Umair

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

愛放△進行李 2024-11-08 15:11:28

你可以像缓存其他任何东西一样缓存它:

 var cache = new Dictionary<Type, IEnumerable<Attribute>>();

 // obj is some object
 var type = obj.GetType();
 var attributes = type.GetCustomAttributes(typeof(MyAttribute), true);
 cache.Add(type, attributes);

You would cache it like you would anything else:

 var cache = new Dictionary<Type, IEnumerable<Attribute>>();

 // obj is some object
 var type = obj.GetType();
 var attributes = type.GetCustomAttributes(typeof(MyAttribute), true);
 cache.Add(type, attributes);
人海汹涌 2024-11-08 15:11:28

我建议不要缓存反射(呵呵),因为它(当然)是由运行时完成的。如果您想减少查找时间以及动态调用开销,

  1. 只需保留对 MethodInfo/PropertyInfo 对象的引用即可调用
  2. 将反射方法转换为表达式。我建议使用 DLINQ,以免重新发明轮子。请参阅此处以获取更多指针 解析字符串 C# LINQ 表达式

无论您做什么:不要过早优化使事情复杂化。

I suggest not caching the reflection (hehe) because it is (of course) done by the runtime. If you mean to reduce lookup time and perhaps dynamic invocation overhead

  1. Just hold a reference to the MethodInfo/PropertyInfo object to call
  2. transform the reflected methods into Expressions. I suggest using DLINQ in order not to reinvent the wheel. See here for more pointers Parsing a string C# LINQ expression

And whatever you do: don't complicate things by optimizing prematurely.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文