gpt4 book ai didi

c# - 我应该做些什么来制作一个高性能和健壮的反射缓存?

转载 作者:行者123 更新时间:2023-11-30 21:26:17 25 4
gpt4 key购买 nike

在 .NET 3.5 中,我将使用 System.Reflection 来使用 AOP(可能在 CaSTLe 的 Windsor 拦截器的上下文中)来执行诸如定义需要在方法级别执行哪些安全操作等操作. 我听说 Reflection 的某些部分很慢(我已经阅读了有关它的 MSDN 文章),并且想缓存这些部分(无论如何,当我接近生产代码时)。我想验证我的方法:

  • 缓存键是{类型} + {区分大小写的方法名称} + {参数类型列表}
  • 可以通过等于操作比较缓存键对象
  • 缓存负载是 {MethodInfo} + {方法上定义的自定义属性列表}
  • 通过构造函数注入(inject)将缓存注入(inject)我的拦截器
  • 缓存可以保持很长时间(基于我不打算编写自修改代码的假设;-))

更新:

我不打算通过我自己写的反射来调用方法;只是(目前)在我想注入(inject)功能的属性上查找属性,其中属性定义要注入(inject)的行为。我的拦截器目前将使用 CaSTLe 的 Windsor IInterceptor 机制,直到我发现有理由更改它。

最佳答案

显式调用 MethodInfo 确实很慢 - 但如果将其转换为委托(delegate),您可以使其更快,很多。参见 this blog post例如。当然,这对查找方法等没有帮助,但如果您要重复调用该方法,则值得牢记。

缓存键听起来很容易构建——类型和字符串比较起来很容易。值(value)观总是相对简单:)

一旦构建,缓存将是只读的吗?你能把阶段分开,这样你就可以保证它在完全构建之前不会被阅读吗?如果是这样,您应该能够在没有任何显式锁定的情况下逃脱 - 基本上是从您的自定义键类型到您的自定义值类型的字典。

关于c# - 我应该做些什么来制作一个高性能和健壮的反射缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/193873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com