-
19-09-2019 - |
题
Quandry是 - 以下两种方法中的哪个执行最佳
目标 - 获取类型包装器的对象(下面定义)
标准 - 储存速度
不。记录 - 大约1000-大约2000,最大约6K
选择 - 即时创建对象或从字典中进行查找
执行速度 - 称为X次每秒
NB-我需要先交付工作代码,然后进行优化,因此,如果任何理论家都可以在场景信息后面提供瞥见,那么在我进行实际的性能测试之前,这可能会有所帮助。
定义 -
class Wrapper
{
public readonly DataRow Row;
public Wrapper(DataRow dr)
{
Row = dr;
}
public string ID { get { return Row["id"].ToString(); } }
public string ID2 { get { return Row["id2"].ToString(); } }
public string ID3 { get { return Row["id3"].ToString(); } }
public double Dbl1 { get { return (double)Row["dbl1"]; } }
// ... total about 12 such fields !
}
Dictionary<string,Wrapper> dictWrappers;
方法1
Wrapper o = new Wrapper(dr);
/// some action with o
myMethod( o );
方法2
Wrapper o;
if ( ! dictWrappers.TryGetValue( dr["id"].ToString(), out o ) )
{
o = new Wrapper(dr);
dictWrapper.Add(o.ID, o);
}
/// some action with o
myMethod( o );
解决方案
第一个会更快,因为它实际上并没有进行查找,而只是进行简单的分配和分配。
代码的两个段几乎不相等。但是,在功能中,因为方法1可以创建许多重复。
其他提示
- 永远不要先进行分析,从不优化。
- 除非代码不符合规格/期望,否则切勿配置。
- 如果您需要介绍此代码,请同时编写该代码,并通过预期的负载进行基准测试。
编辑:除非性能是不可接受的,否则我会尝试以下优化以下优化:
- 简单
- 可读性
- 可维护性
- 可检验性
最近(最近)看到了非常优化的代码,很难进行调试。我对其进行了重构以简化它,然后进行了性能测试。性能是不可接受的,因此我对其进行了介绍,找到了瓶颈,并且仅优化了这些瓶颈。我重新运行了性能测试,新代码与高度优化的版本相当。现在要容易得多。
这是免费的 分析工具.
如果没有实际测试,我希望将包装器中的现场值缓存(即避免所有的tostring呼叫和铸件)可能会对性能产生更多影响。
然后,一旦您缓存了这些值,您可能希望将包装器的实例保持在周围,而不是经常重新创建它们。
假设你是 真的 担心per(嘿,它发生了),然后您的基础包装器本身可以得到改善。您正在按字符串进行现场查找。如果您要在行中使用相同的字段进行大量调用,那么缓存序列并通过序数查找实际上更快。
当然,只有您真的需要担心性能,而这种有所作为的实例相当罕见(尽管在嵌入式设备中,但它并不像桌面上那样罕见)。
不隶属于 StackOverflow