gpt4 book ai didi

c# - 在 C#/.NET 4.0 中填充和使用动态类

转载 作者:太空宇宙 更新时间:2023-11-03 20:40:57 25 4
gpt4 key购买 nike

在我们的应用程序中,我们正在考虑使用动态生成的类来保存我们的大量数据。这样做的原因是我们有客户的表具有不同的结构。因此,您可能有一个名为“DOG”的客户表(只是编造的),其中包含列“DOGID”、“DOGNAME”、“DOGTYPE”等。客户 #2 可能有同一个表“DOG”,其中列“DOGID”、“DOG_FIRST_NAME”、“DOG_LAST_NAME”、“DOG_BREED”等。我们无法在编译时为这些创建类,因为客户可以随时更改表架构。

目前我有代码可以在运行时使用反射生成“DOG”类。我想弄清楚的是如何从 DataTable(或其他一些 .NET 机制)填充此类,而不会造成极端的性能损失。我们有一个包含约 20 列和约 50k 行的表。对所有行和列执行 foreach 以创建集合大约需要 1 分钟,这有点太长了。

我是在尝试提出一个过于复杂的解决方案,还是在正确的轨道上?有没有其他人遇到过这样的问题?创建动态类是微软开发人员提出的解决方案。如果我们可以填充这个集合并有效地使用它,我认为它可以工作。

最佳答案

您尝试做的事情在 .NET 3.5 中会变得相当复杂。您最好为模型中的数据创建一个包含键/值对的 Dictionary<> 的类型。

如果您可以使用 .NET 4.0,您可以查看 using dynamic and ExpandoObject . dynamic关键字可让您创建对真正动态对象的引用 - ExpandoObject允许您轻松地动态添加属性和方法。所有这些都没有复杂的反射或代码生成逻辑。动态类型的好处是 DLR 对运行时绑定(bind)信息执行一些复杂的缓存,以允许类型比常规反射允许的性能更高。

如果您需要做的只是将数据加载映射到现有类型,那么您应该考虑使用类似 EntityFramework 的东西或 NHibernate为您的类型提供 ORM 行为。

为了处理数据加载性能,我建议您考虑完全绕过 DataTable 并将记录直接加载到您正在生成的类型中。我怀疑大多数性能问题都在于从数据表中读取和转换值的原始位置。

关于c# - 在 C#/.NET 4.0 中填充和使用动态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2700079/

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