Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象审计_C#_Data Access Layer - Fatal编程技术网

C# 对象审计

C# 对象审计,c#,data-access-layer,C#,Data Access Layer,目前,我们在应用程序中有一个相当庞大的对象审计系统,流程如下 -类实现一个接口 -接口强制类重写某些方法,以便将需要审核的属性添加到KeyValuePairs列表中 -类,然后还需要从键值对列表中重新创建对象状态 现在,开发人员需要将所有这些添加到该类中,而且我们的对象经常更改,所以我们不只是序列化该类 我想做的是使用属性将属性标记为可审核,然后自动执行所有操作,这样开发人员就不需要执行任何操作 我的主要问题是——我知道人们总是说反思很慢,我们说话有多慢?通过查看类,查看属性,然后执行所需的逻辑

目前,我们在应用程序中有一个相当庞大的对象审计系统,流程如下

-类实现一个接口

-接口强制类重写某些方法,以便将需要审核的属性添加到KeyValuePairs列表中

-类,然后还需要从键值对列表中重新创建对象状态

现在,开发人员需要将所有这些添加到该类中,而且我们的对象经常更改,所以我们不只是序列化该类

我想做的是使用属性将属性标记为可审核,然后自动执行所有操作,这样开发人员就不需要执行任何操作

我的主要问题是——我知道人们总是说反思很慢,我们说话有多慢?通过查看类,查看属性,然后执行所需的逻辑,我将获得什么样的性能影响?

谢谢你的帮助


Ste,

性能是否正常取决于应用程序上下文。所以很难说它对你来说是慢还是快,你应该自己试试

在我看来,最有可能的是,它会提供相当可接受的性能,但我也不知道你要在哪里使用它

与我想到的其他解决方案一样,可能是:

  • Sqlite,保存
    键/值的位置
  • 面向方面编程(如PostSharp)在编译时生成数据
但是我要尝试的第一件事是反射,就像你想的那样。

阅读Marc的回复,我建议反射应该适合大多数应用程序的需要


在进行任何基本更改之前,我建议运行一个探查器来查找代码中的瓶颈。如果您确定反射/审核过程是主要的难点,请使用IL-Emit并重试。

很难给出具体的答案,因为这取决于应用程序的适当性能

反射比普通编译的代码慢,但在担心性能问题时,最好有一些有效的东西,然后使用评测来发现真正的性能瓶颈并进行优化

过早的优化可能会导致代码更难维护,从而降低开发人员的工作效率

我将从使用反射开始,编写一组好的单元测试,这样您就知道您的代码正在工作。如果性能出现问题,您可以使用VisualStudioProfiler分析单元测试并发现瓶颈


有一些库可以加快反射速度,如果反射速度慢,您也可以使用表达式树替换反射代码。

反射就是解决方法。如果速度太慢(测量!),可以添加一点缓存,或者在最坏的情况下生成一个
表达式
,并对其进行编译

您的问题分为两个阶段:

  • 找出需要的属性,并返回它们的
    PropertyInfo
    s列表。每个类型只需执行一次,然后就可以缓存它。因此,这一步的性能并不重要
  • 使用
    PropertyInfo.GetValue
    获取每个属性的值

  • 如果第2步太慢,您需要在第1步中生成一个表达式,而手动编写的代码的开销会减少到一次委托调用。

    感谢您的响应,我原本不打算使用PostSharp来避免反射并生成所需的所有代码,但我的公司不会为任何企业使用付费。我试着反思,试着获得一些基准点!