用双键切换vs词典

时间:2015-05-31 23:31:16

标签: c# performance unity3d

我正在制作Unity游戏(C#2.0),这是我第一次做任何需要最佳性能的事情。当任务结束时,根据任务对象持有的时间因素给予玩家一定数量的资源。总共有4个资源,所以我使用4个16长的switch-on-int(时间* 1000),每个资源一个交换机。

static int resource1reward(double time) 
{
   int time2 = time*1000;
   switch (time2)
   {

   }
}

看一些帖子,我决定尝试使用4个字典。

 Dictionary<double, int> resource1dic = new Dictionary<double, int>(16);
 static int resource1dicreward(double time)
 {
     return resource1[time];
 }

使用秒表,我看到调用(1)4方法之间的巨大差异; (2)查找4个词典的一种方法。

  1. 10至15毫秒
  2. 0到2毫秒
  3. 问题是我仍然有一个很长的静态方法来初始化4个字典。它们都具有相同的键(时间切换)但值不同。有没有更好/更清洁的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

您的业务逻辑有点不清楚,但就Dictionary对象初始化/性能问题而言,下面的解决方案可以作为有效的替代方案。与您的用例相关,您可以声明Dictionary<double, int>,如以下示例C#代码段所示:

public static  Dictionary<double, int> SampleDictionary =new Dictionary<double, int> 
{ 
    { 3.1, 3},
    { 3.14, 3},
    { 3.1415, 3},
    { 2.72, 2},
    { 2.728, 2}
};

这将非常快速而且相当简单。希望这可能有所帮助。

答案 1 :(得分:0)

这样的设置怎么样:

Dictionary<Resource, Dictionary<double, int>> rewards = new Dictionary<Resource, Dictionary<double, int>>();

public class Mission
{
    public Resource ResourceToAward { get; set; }
    public double Time { get; set; }
}

public enum Resource
{
    ResourceOne,
    ResourceTwo,
    ResourceThree,
    ResourceFour
}

从一些简单的测试中,我发现实际的int值一直在 0.9 毫秒内被访问。

Mission theMission = new Mission()
{
    ResourceToAward = Resource.ResourceFour,
    Time = 15
};

Resource resource = theMission.ResourceToAward;
double time = theMission.Time;

int resourceAmountAwarded = rewards[resource][time];

只是一个建议,我会在开始执行任务之前创建Dictionary<Resource, Dictionary<double, int>>对象,这样任务时间就不会增加任何不必要的时间。