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可以创建许多重复。

其他提示

  1. 永远不要先进行分析,从不优化。
  2. 除非代码不符合规格/期望,否则切勿配置。
  3. 如果您需要介绍此代码,请同时编写该代码,并通过预期的负载进行基准测试。

编辑:除非性能是不可接受的,否则我会尝试以下优化以下优化:

  • 简单
  • 可读性
  • 可维护性
  • 可检验性

最近(最近)看到了非常优化的代码,很难进行调试。我对其进行了重构以简化它,然后进行了性能测试。性能是不可接受的,因此我对其进行了介绍,找到了瓶颈,并且仅优化了这些瓶颈。我重新运行了性能测试,新代码与高度优化的版本相当。现在要容易得多。

这是免费的 分析工具.

如果没有实际测试,我希望将包装器中的现场值缓存(即避免所有的tostring呼叫和铸件)可能会对性能产生更多影响。

然后,一旦您缓存了这些值,您可能希望将包装器的实例保持在周围,而不是经常重新创建它们。

假设你是 真的 担心per(嘿,它发生了),然后您的基础包装器本身可以得到改善。您正在按字符串进行现场查找。如果您要在行中使用相同的字段进行大量调用,那么缓存序列并通过序数查找实际上更快。

当然,只有您真的需要担心性能,而这种有所作为的实例相当罕见(尽管在嵌入式设备中,但它并不像桌面上那样罕见)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top