在每个项目中,我们都有一个文件用于存储该项目中使用的各种SQL语句.关于如何声明类以及如何声明字符串,有一些变体.
示例类声明:
internal sealed class ClassName
internal static class ClassName
public sealed class ClassName
public static class ClassName
internal class ClassName
Run Code Online (Sandbox Code Playgroud)
示例字符串声明:
internal const string stringName
internal static string stringName
public static readonly string stringName
public static string stringName
public const string stringName
Run Code Online (Sandbox Code Playgroud)
我不明白不同声明之间的性能影响.这种情况/场景是否有最佳实践?
Eri*_*ert 82
我不明白不同声明之间的性能影响
评估数据库查询的成本可能是从常量字段更改为只读字段的成本差异的数百万或数十亿倍,反之亦然.当您拥有以毫秒为单位测量延迟的数据库操作时,甚至不要担心需要几纳秒的性能.
你应该担心的是语义,而不是表现.这个问题归结为"只读,不变或两者都没有?"
获得正确的语义."只读"字段表示"每次执行该程序时该字段只改变一次",从null到其值."const"字段的意思是"这个值永远不会改变,不是现在,不是在下一个版本,不是永远,它始终是恒定的." 普通字段可以随时改变值.
只读字段就像版本号.它随着时间的推移而变化,但不会改变程序的执行.常数就像pi,或铅的原子序数; 它是固定的,永恒的,永不改变的.普通的领域对于在程序过程中发生变化的东西是有利的,比如黄金的价格.你的查询是什么样的?它是否会在整个程序过程中保持不变,始终保持不变,或者根本不变?
您应该根据哪些代码使用字符串来选择访问修饰符(public或internal).
static const 是一个编译器错误.
甲static readonly字段是一个正常的场不能静态构造函数后进行设置.
A const string将在编译时由其文字值替换.
因此,它会提供稍好的性能(因为运行时不使用该字段).
然而,因为它在编译时取代,在一个组件中的任何改变的定义不会被其他组件回升,直到他们全部重新编译.
如果您的代码仅用于一个程序集,那么您也可以使用const字符串.
但是,如果您的字符串被其他程序集使用(或者将来可能会使用),则应使用static readonly字符串来实现可维护性.
另请注意,const字符串是编译时常量.
如果您需要在字符串中添加机器名称或用户名等内容,则需要进行此操作static readonly.
在const vs static readonly上:
const可以有更好的性能,因为它是一个编译时常量
但另一方面它有二进制版本问题.常量被内联到使用它的程序集中,因此如果声明它的程序集发生更改,则需要重新编译其他程序集,或者它将使用过时的常量.
对于结构我通常使用静态属性而不是只读字段,因为抖动可以优化它,但我仍然没有版本控制问题.