2014-11-30 2 views
-3

Привет В настоящее время я пишу план тестирования части моего проекта, и я хотел бы знать, как измерить, сколько времени занимает моя сортировка. Моя попытка выглядела так:Как измерить, сколько времени занимает IComparer?

private void byIGNameToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     GameDB.Sort(new PlayerNameComparer()); 
     currentEntryShown = 0; 
     ShowData(); 
     UpdatePrevNextBtnStatus(); 
    } 
    public class PlayerNameComparer : IComparer 
    { 
     Stopwatch stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
     public int Compare(object x, object y) 
     { 
      return ((Player)x).playerIgName.CompareTo(((Player)y).playerIgName); 
     } 
     stopwatch.Stop(); 
     MessageBox.Show("Time Elapsed:" + stopwatch.ElapsedMilliseconds); 
    } 

Но я получаю ошибку компиляции: 'DBProject.Form1.PlayerNameComparer.stopwatch' is a 'field' but is used like a 'type'

ответ

-2

Вы выполняете операторы в области класса, а не в методе;)
В PL языке ->Nie mozesz wykonywać kodu w obrębie klasy, rób to w metodach :)
Просто поместите их в метод

public int Compare(object x, object y) 
{ 
Stopwatch stopwatch = new Stopwatch(); 
stopwatch.Start(); 
int ret =((Player)x).playerIgName.CompareTo(((Player)y).playerIgName) 
stopwatch.Stop(); 
MessageBox.Show("Time Elapsed:" + stopwatch.ElapsedMilliseconds); 
    return ret; 

} 

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

private void byIGNameToolStripMenuItem_Click(object sender, EventArgs e) 
{  
    Stopwatch stopwatch = new Stopwatch(); 
    stopwatch.Start(); 
    GameDB.Sort(new PlayerNameComparer()); 
    stopwatch.Stop(); 
    MessageBox.Show("Time Elapsed:" + stopwatch.ElapsedMilliseconds); 

    currentEntryShown = 0; 
    ShowData(); 
    UpdatePrevNextBtnStatus(); 
} 
public class PlayerNameComparer : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     return ((Player)x).playerIgName.CompareTo(((Player)y).playerIgName); 
    } 
} 
+0

Спасибо, Dzięki! :) –

+0

Добро пожаловать bracie: P Не забудьте проверить ответ как полезный:) – Toumash

+0

Проверьте также ответ alexo, у него есть хорошая идея об оптимизации вашего кода – Toumash

1

этот ответ совершенно неправильно, как вы в методе Compare и вызывается несколько раз во время сортировки.

способ проверить это было бы что-то похожее на это:

private void byIGNameToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Stopwatch stopwatch = new Stopwatch(); 
    stopwatch.Start(); 

    GameDB.Sort(new PlayerNameComparer()); 

    stopwatch.Stop(); 
    MessageBox.Show("Time Elapsed:" + stopwatch.ElapsedMilliseconds); 

    currentEntryShown = 0; 
    ShowData(); 
    UpdatePrevNextBtnStatus(); 
} 
public class PlayerNameComparer : IComparer 
{ 

    public int Compare(object x, object y) 
    { 
     return ((Player)x).playerIgName.CompareTo(((Player)y).playerIgName); 
    } 

} 

рассмотреть Кроме того, используя общую версию IComparer, так как его сильно типизированных и вам не нужно распаковывать из object типа на ваш class тип.

Хорошим примером может быть:

public class StringComparer : IComparer<string> 
{ 
    public int Compare(string x, string y) 
    { 
     return x.CompareTo(y); 
    } 
} 

в вашем случае может превратиться в:

public class PlayerNameComparer : IComparer<Player> 
{ 
    public int Compare(Player x, Player y) 
    { 
     return x.playerIgName.CompareTo(y.playerIgName); 
    } 
} 
Смежные вопросы