【发布时间】:2011-09-10 00:48:48
【问题描述】:
我有自己的 ORM,但我注意到当我得到 100k 个结果时它的性能很差。对于每次迭代,我都会反映每种类型、它的字段/属性和它使用的类(1 个深度)。
反映一个类 10 万次会变慢。有什么东西我可以用来生成 C# 代码,所以我不需要使用反射吗?我可以将重要的选择查询重写为常规 sql 而不是使用我的 ORM,但我想我先问是否有工具。
我正在使用 mysql 数据库。
-edit- 临时解决方案。 dapper.net 似乎具有我需要的查询性能,而我自己的 orm 创建表、插入并具有附加执行功能。在两者之间,我认为我拥有我需要的一切。 (请记住,我需要 dapper 提供的选择性能,除非我的网站变得庞大,否则我不需要插入性能)
【问题讨论】:
-
您可以使用
System.Reflection.Emit命名空间为您将考虑的每种类型发出一个专门的类。 -
既然有这么多经过尝试和测试过的ORM,你为什么还要费心编写自己有缺陷的(根据你自己的推理)ORM?与其使用反射,不如尝试代码生成...
-
@Mitch:这是大约 2 年前,我在一周内写的。它完全符合我的需要(本地计算机,没有性能要求。非常易于使用)。现在我需要一些不同的东西。
-
@cdhowie:你什么意思?问题是我反射了 100k 次,这并不是反射有多慢的事实。它只是我想摆脱的开销。
-
@Mitch:有趣的是,实体框架看起来比我的 ORM 更难使用,如果它在每个循环中都进行反射,那么它也会有同样的问题。 (PS:我的语法是
var ls = conn.SelectAll<PoDType>("where !col=? AND !col2=?", a, b);,我可以写成func( ls.first().col.data)。非常棒,但对大量的性能不友好)