C#性能问题

Kum*_*mar -8 .net c# optimization performance high-availability

quandry是 - 以下两种方法中的哪一种执行最佳
目标 - 获得类型为Wrapper(下面定义)
标准的对象- 速度超过存储
号.记录 - 约1000-约2000,最大约6K
选择 - 动态创建对象或从字典
执行查找执行速度 - 每秒调用x次

注意 - 我需要首先提供工作代码,然后进行优化,因此如果任何理论家可以提供场景信息背后的一瞥,那么在我进行实际性能测试之前可能会有所帮助.

定义 -

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;  
Run Code Online (Sandbox Code Playgroud)

方法1

Wrapper o = new Wrapper(dr);  
/// some action with o
myMethod( o );
Run Code Online (Sandbox Code Playgroud)

方法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 );    
Run Code Online (Sandbox Code Playgroud)

Tru*_*ill 7

  1. 永远不要优化而不首先进行分析
  2. 除非代码不符合规格/期望,否则不要进行分析.
  3. 如果您需要分析此代码,请以两种方式编写代码并根据预期负载对其进行基准测试.

编辑:我试图赞成以下优化,除非性能是不可接受的:

  • 简单
  • 可读性
  • 可维护性
  • 可测性

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


Amy*_*y B 5

这是一个免费的分析工具.