.NET 反射的“成本”是多少? [复制]

2023-11-27

可能的重复:
.NET 反射的成本有多高?

我目前的编程心态是反思是我最好的朋友。我经常使用它来动态加载内容,允许“松散实现”而不是严格的接口,以及许多自定义属性。

使用反射的“实际”成本是多少?

对于频繁反射的类型是否值得付出努力来缓存反射,例如我们自己的针对表定义的所有属性的前 LINQ DAL 对象代码?

缓存内存占用是否会超过反射 CPU 使用量?


反射需要加载大量的类型元数据然后进行处理。这可能会导致更大的内存开销和更慢的执行速度。根据本文属性修改速度大约慢 2.5 倍到 3 倍,方法调用速度慢 3.5 倍到 4 倍。

这里有一个优秀的MSDN 文章概述如何使反射更快以及开销在哪里。如果您想了解更多信息,我强烈建议您阅读。

反射还可以增加代码的复杂性,使其变得更加混乱,从而难以使用。有些人,比如斯科特·汉塞尔曼相信通过使用反思,你常常会制造出比解决的问题更多的问题。如果您的团队主要是初级开发人员,情况尤其如此。

如果您需要大量动态行为,您最好研究一下 DLR(动态语言运行时)。随着 .NET 4.0 中出现的新变化,您可能想看看是否可以将其中的一些变化合并到您的解决方案中。 VB 和 C# 增加的对动态的支持使得使用动态代码变得非常优雅,并且可以相当直接地创建您自己的动态对象。

祝你好运。

编辑:我又浏览了斯科特的网站,发现了这个podcast关于反思。我没有听过,但可能值得一听。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 反射的“成本”是多少? [复制] 的相关文章

  • C++ - 模板专业化和部分专业化

    我一直在互联网和 stackoverflow 上寻找具体的答案 但我似乎找不到 我必须创建一个通用类 然后实现特定的功能 我的具体说明是 您需要使用模板表达式参数以及模板类专业化和部分专业化 我有一个模板类 template
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • 禁用除滚动之外的 DataGridView

    我如何配置 datagridview 以便用户只能在行中移动并使用滚动 而没有其他 如果我禁用网格不允许我使用滚动 将您的 datagridview 设置为只读 这将禁用任何编辑 dataGridView1 ReadOnly true 在你
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • 使用反射创建 Action<'T> 的实例

    我将如何创建一个实例Action lt T gt 使用反射 这是我所拥有的 let makeAction typ Type f T gt unit let actionType typedefof
  • 首先EntityFramework数据库 - 类型映射 - 将binary(8)从SQL映射到C#中的int

    在 SQL 内部 我有一个主键为二进制 8 的表 当我使用该表添加到我的模型中时Update Model from Database我可以看到该列有 type Binary 在 C 中 我将该列设为byte 我可以将该列映射到 int 吗
  • 使用正则表达式匹配以“Id”结尾的单词?

    如何组合一个正则表达式来匹配以 Id 结尾的单词并进行区分大小写的匹配 试试这个正则表达式 w Id b w 允许前面的单词字符Id和 b确保Id位于单词末尾 b是字边界断言
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • ASP MVC 5 - 403 customError 不起作用

    我正在尝试为我的应用程序创建自定义错误页面 它在大部分情况下都有效 但不适用于403 errors 我的网络配置
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • 为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此 Braced-Init-List 代码?

    我有一个问题大括号括起来的列表的不同含义 https stackoverflow com q 37682392 2642059 我知道C 03不支持C 11initializer list 然而 即使没有 std c 11编译器标志 gcc
  • 为什么我的 ITexthandler 不工作?我正在尝试将 XML 解析为 ITextSharp 文档

    我正在使用 Visual Developer 2010 MVC 3 c 我正在尝试将 XML 解析为 iTextSharp 文档 如下所示 ITextHandler textHandler new ITextHandler doc text
  • 语义问题 Qt Creator:命名空间“std”中没有名为“cout”的成员

    我开始使用 Qt Creator 编写代码 对于 C 文件 我遇到很多语义问题 99 是 命名空间 yyy 中没有名为 xxx 的成员cpp文件构建 编译和输出没有问题 如果我点击例如cout 我已链接到 iostream 我是否需要在 Q
  • 如果数组为空,LINQ 返回 null

    public class Stuff public int x other stuff 我有一个IEnumerable
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal
  • C 中的静态和动态绑定(严格来说是 C,而不是 C++)是什么?

    我最初对发布这个问题感到担忧 以免它重复 但即使在谷歌搜索了许多关键字之后 我在 StackOverflow 上找不到任何解释 C 的静态和动态绑定的链接 尽管有 C 的问题和答案 但是都涉及classes以及显然不适合 C 的东西 Sta

随机推荐

  • 为什么 ActualSize 没有更新其在 WPF 上的值?

    我有以下代码
  • 更改 ASP.NET MVC 应用程序中的日期格式

    我需要将日期格式更改为dd MM yyyy 我收到客户端验证错误 因为 ASP NET MVC 日期格式与我在服务器上期望的格式不同 为了更改 ASP NET MVC 日期格式 我尝试了 网页配置
  • 检查成员是否存在,可能在基类中,C++11 版本

    In https stackoverflow com a 1967183 134841 提供了一个解决方案用于静态检查成员是否存在 可能在类型的子类中 template
  • Google Places API 与 Google 地图结果

    我在 Google 地图上看到了一些结果 但它不是通过 Google Places API 提供的 而谷歌地图显示 Storybook Land Black Horse Pike 蛋港镇 新泽西州 美国 为什么会出现这种差异 难道 Goog
  • 删除Python中以点分隔的字符串的最后一部分

    如何以优雅的方式转换字符串 例如 test test1 test2 test test3 test4 成这样的字符串 test test1 test test3 这里不需要正则表达式 Use str rsplit output inputs
  • 类型“{header:Header;}”的参数不可分配给类型“RequestOptionsArgs”的参数

    我在尝试在 HTTP POST GET 请求中传递标头时收到以下错误Argument of type header Header is not assignable to parameter of type RequestOptionsAr
  • R:哪个热图/图像可以获得没有任何树状图的行排序图?

    哪种套餐最适合仅对行进行排序的热图 图像 但不显示任何树状图或其他视觉混乱 只是两个轴上带有自动命名标签的二维彩色网格 除了基本的数字排序之外 我不需要花哨的聚类 数据是我想要可视化的 0 0 21 范围内的 39x10 数字表 我搜索了S
  • 如何保持 Intent 服务运行

    我有两个 Intentservice 的例子 一种是commonsware 书中的Download 示例 另一个是在http www vogella com articles AndroidServices article html ser
  • Android 中的反向音频文件

    我正处于开发这个应用程序的早期阶段 但研究它我已经遇到了一个问题 我需要能够向后播放音频文件 你知道喜欢揭示隐藏的消息 我没有在 Android 上处理音频的经验 也不知道这是否可能 我在这里发现了一个问题 它解决了java中的问题 点击这
  • 所有任务的单个工作线程还是多个特定工作线程?

    我正在使用 PyQt5 创建一个简单的 GUI 应用程序 其中我从 API 请求一些数据 然后使用这些数据填充 UI 的各种控件 我在 PyQt 中关注的有关工作线程的示例似乎都是子类QThread然后在重写中执行他们的业务逻辑run 方法
  • 将数据帧写入 csv 文件时解决错误“分隔符必须是 1 个字符的字符串”

    使用这个问题 Pandas 将数据帧写入 CSV 文件作为模型 我编写了以下代码来制作 csv 文件 df to csv Users Lab Desktop filteredwithheading txt sep s header True
  • C++ 中的 Realloc 等效项

    是的 另一个realloc vs std vector问题 我知道你要说什么 我同意 忘记手动内存分配 只需使用std vector 不幸的是 我的教授禁止我在这项作业中使用 STL 中的任何内容 所以是的 我有一个动态数组T我需要调整它的
  • 如何使用 Nokogiri 和 Ruby 解析 JavaScript

    我需要从网站中解析一个数组 我想要解析的 JavaScript 部分如下所示 arPic 0 http example org image1 jpg arPic 1 http example org image2 jpg arPic 2 h
  • Wix / MSI:无法卸载

    我为一个内部项目开发了一个 Wix 安装程序 但是完全偶然 我发现我无法在我的开发计算机上卸载该安装程序 因为我收到以下错误消息 您尝试使用的功能所在的网络资源不可用 有一个对话框指向我从功能安装的 msi 的路径 msi 在那里 但是它已
  • 类定义内的自引用

    如何在类定义中引用类对象 你能告诉我你会怎么做吗 或者更具体地说 如何在类方法的装饰器中传递类对象 这是一个简单的例子 我试图将我声明的第二个方法传递给第一个方法的装饰器 def decorate w def wrap f def call
  • preg_replace:错误的正则表达式==“未知修饰符”?

    我正在编造虚假的电子邮件地址 我只是想确保它们采用有效的电子邮件格式 因此我尝试删除不在以下集合中的任何字符 jusr email preg replace a zA Z0 9 g jusr email 我在 Windows 机器上没有遇到
  • Laravel 5 + AngularJS 跨域 CORS

    我到处寻找答案 但到目前为止没有任何效果 堆栈上列出的所有解决方案尚未被证明是足够的 我的 laravel 日志中没有任何错误形式的信息 我只得到标准 XMLHttpRequest cannot load http api domain d
  • 弹性项目是否应该溢出弹性容器而不是换行?

    我有这样的布局 A row 柔性容器 with a 确定尺寸 e g width 175px A flex item 与一个在definite flex basis e g flex basis content 这是不灵活的 例如flex
  • 为 Scikit-image 构建自定义 AWS Lambda 层

    Outline 我需要使用scikit image在一些 AWS lambda 函数内部 所以我希望构建一个自定义 AWS lambda 层 其中包含scikit image 我的问题一般应该适用于任何 python 模块 尤其是 scik
  • .NET 反射的“成本”是多少? [复制]

    这个问题在这里已经有答案了 可能的重复 NET 反射的成本有多高 我目前的编程心态是反思是我最好的朋友 我经常使用它来动态加载内容 允许 松散实现 而不是严格的接口 以及许多自定义属性 使用反射的 实际 成本是多少 对于频繁反射的类型是否值