所以,我有一个 C# 应用程序,它具有约 4 层深的自定义类型层次结构。
此分层的存在是为了提供数据验证和更改事件传播的干净实现。
一个例子是:
DocumentNameValue -> NameValue -> StringValue -> BaseDataValue
。
该系统运行良好,但考虑到所有间接层,性能冲浪者。从绝对意义上讲,这并不是一个巨大的打击,但它确实加起来了。
澄清一下,性能问题似乎是数据访问时发生的嵌套调用的结果。
例如,调用 DocumentNameValue.setValue("test.doc")
将导致层次结构的每一层对输入运行某些验证测试。这些从底部开始向上移动。沿途还会触发各种事件。如果有意义的话,该值实际上“存储”在层次结构的底部。
由于我真正所做的只是定义了一个严格的类型层次结构,是否存在推荐的方法来执行以下任一操作:
- 将此 C# 代码转换为“平面”高性能等效代码? (运行时或编译时)
- 或者,也许更好的是,构造一个 DSL,它只会吐出等效的类型/对象列表?
总体目标有两个:拥有特定于我的应用程序问题域的强类型,提供一个干净的地方来放置我的验证规则。
谁能提供一些提示/建议?我做错了吗?
谢谢
最佳答案
我的第一直觉是质疑您如何知道这是性能下降的原因。你跑过探查器吗?
我的第二个问题是要一个代码示例。这种分层是否通过 OOP(继承)反射(reflect)出来?
据我了解,您使用不同的类型来表示不同的关注点——这很好。您已经构建了类似 ViewModel/Model/DataModel 的东西,这是非常标准的。
鉴于您的评论,我建议您下载 ANTS Performance Profiler 的试用版并使用它来分析缓慢的实现;它会准确地告诉您哪些方法花费的时间最长,并让您量化变化的结果。
除非应用程序非常简单,否则我不建议立即拆开您的分层方法。学习如何干净利落地实现分层系统可以让您以后保持理智。
关于c# - C# 中 DSL/自定义类型的工具包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4442213/