2016-10-21 3 views
0

Предположим, если я должен сделать три объекта для класса балансира, в чем разница между созданием объекта как этотЕсть ли увеличение производительности при использовании Indexer для объектов?

flyweight f1=new flyweight(); 
flyweight f2=new flyweight(); 
flyweight f3=new flyweight(); 

и как это?

public class flyweight 
{ 
    flyweight[] obj = new flyweight[3]; 
    public flyweight this[int index] 
    { 
     get{ 
      if (index < 3) { 
       obj[index] = new flyweight(); 
      } 
      return obj[index]; 
     } 
    } 
    public void display() { 
     Console.WriteLine("this is a object"); 
    } 
    public void load() { 
     flyweight f = new flyweight(); 
     for (int i = 0; i < 3; i++) { 
      f[i].display(); 
     } 
    } 
} 

Есть ли увеличение производительности при использовании Indexer для создания объектов?

+0

Пожалуйста, не цитируйте фрагменты текста, которые на самом деле не цитируются, например, ваш вопрос в конце. Я также настоятельно рекомендую вам начать следовать соглашениям об именах .NET. –

+0

Это очень странный код, поскольку мухи обычно неизменны - в то время как вы используете мухи как завод для других мухолов, что совершенно необычно. –

+2

Два куска кода имеют разные вещи, но общее правило - писать понятный понятный код и задавать цели производительности. Затем, как только код четко выполнит правильную вещь (невозможно определить, действительно ли какой-либо из ваших образцов кода работает с тех пор, как мы не знаем спецификацию), * измерьте * производительность. Только если это не соответствует целям, вы должны начать оценивать альтернативы. –

ответ

1

Свойство индекса составлено в виде простого метода public flyweight get_Item(int index). Вызов метода не быстрее, чем доступ к переменным f1, f2 и f3 напрямую (хотя у меня нет доказательств для этого).

Если вы оптимизируете этот уровень без каких-либо проблем с производительностью, вы, скорее всего, получите приложение, полное ошибок, потому что ваш макет приложения беспорядок.

0

Если все, что вы могли бы использовать двойной подход, используя как переменные экземпляра и массив:

var f1 = new flyweight(); 
var f2 = new flyweight(); 
var f3 = new flyweight(); 
var flyweights = new[] { f1, f2, f3 }; 

Это позволяет использовать конкретные примеры, если вам нужно, и перебрать все из них, где это может быть полезно ,

Смежные вопросы