Есть ли какая-то причина, по которой идентичные математические операции в одном приложении Silverlight могут занимать значительно больше времени, чем в другом?
Например, у меня есть некоторый код, который берет список точек и преобразует их (масштабирует и переводит их) и заполняет другой список точек. Важно, чтобы я сохранил исходные точки без изменений, поэтому второй список.
Вот соответствующий код (шкала двойная, а точка начала - точка):
public Point transformPoint(Point point) {
// scale, then translate the x
point.X = (point.X - origin.X) * scale;
// scale, then translate the y
point.Y = (point.Y - origin.Y) * scale;
// return the point
return point;
}
Вот как я делаю цикл и время, если это важно:
DateTime startTime = DateTime.Now;
foreach (Point point in rawPoints) transformedPoints.Add(transformPoint(point));
Debug.Print("ASPX milliseconds: {0}", (DateTime.Now - startTime).Milliseconds);
При пробеге 14356 баллов (не спрашивайте, он смоделирован с реальным числом в настольном приложении), разбивка выглядит следующим образом:
Приложение Silverlight № 1: 46 мс
Приложение Silverlight №2: 859 мс
Первое приложение - это пустое приложение, которое выполняет цикл в конструкторе MainPage. Второй - выполнение цикла в методе другого класса, и метод, я думаю, вызывается во время обработки события в потоке графического интерфейса. Но должно ли что-то происходить, учитывая, что идентичные операции происходят внутри самого цикла?
Может быть, что-то огромное мне не хватает в том, как работает многопоточность, или что-то в этом роде, но это несоответствие мне вообще не имеет смысла.