Здравствуйте, Andrbig, Вы писали:
A>VB предоставляет ряд возможностей для тормозов, надо их знать и в них не вляпаться, вот и все. Валить собственное незнание на язык — пионерство.
Вот я про какие тормоза.
Здравствуйте, V.Petrovski, Вы писали:
VP>Здравствуйте, Mika Soukhov, Вы писали:
MS>>Я о разнице в ИЛ. Из твоего сообщения я понял, что на VB тормозит. Так? VP>Вообще-то я говорил про возможность создания на C#1.0 типизированного итератора, VP>который работает быстрее универсального IEnumerator.
А где тесты то? Я вижу только результаты сравнени языков
VP>А VB.NET здесь упомянут для того, что бы показать что такие итераторы можно использовать и в VB.NET
Понятно. В данном топике описано две проблемы (можно было бы и разбить на отдельные сообщения ). Я этого не увидел.
C# 1.0 позволяет реализовать шаблон итератора для каждого цикла без IEnumerator или IEnumerable, хотя о такой возможности большинство разработчиков не знает. Тогда компилятор будет вызывать строго типизированную версию, не прибегая к приведению типов и упаковке. Так что даже в версии 1.0 можно избежать снижения производительности.
Я взглянул в спецификацию языка и нашел описание этой возможности
To iterate through a collection, the collection must meet specific requirements. For example, in the following foreach statement:
foreach (ItemType item in myCollection)
myCollection must meet the following requirements:
The collection type: 1. Must be one of the types: interface, class, or struct.
2. Must include an instance method named GetEnumerator that returns a type, for example, Enumerator (explained below).
The type Enumerator (a class or struct) must contain: 1. A property named Current that returns ItemType or a type that can be converted to it. The property accessor returns the current element of the collection.
2. A bool method, named MoveNext, that increments the item counter and returns true if there are more items in the collection.
Исходя из этого описывая коллекцию вот таким вот образом мы делаем строго типизированную версию итератора.
using System;
using System.Collections;
namespace TypedEnumerator
{
public class MyCollection/* : IEnumerable */
{
public int[] items;
public MyCollection(int capacity)
{
items = new int[capacity];
}
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(this.items);
}
/*
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
*/public class MyEnumerator/* : IEnumerator */
{
int i;
int[] items;
private int length;
public DataObjCollection2Enumerator(int[] items)
{
this.items = items;
this.i = -1;
this.length = items.Length;
}
public bool MoveNext()
{
i++;
return i < length;
}
public void Reset()
{
i = -1;
}
public int Current
{
get
{
return items[i];
}
}
/*
object IEnumerator.Current
{
get
{
return Current;
}
}
*/
}
}
}
Раскометировав все строки в этом примере мы добавим реализацию интерфейсов IEnumerable и IEnumerator но на производительности кода это никак не скажеться.
Хотя в спецификации C#1.0 написано, что такая колекция может использоваться только в языке C#, это ЛОЖЬ.
Такую колекцию можно использовать и в VB.NET.
Вот реpультаты пробега по колекциям в 1 миллион элементов типа Int32, при помощи их итераторов
на C#
Здравствуйте, Mika Soukhov, Вы писали:
MS>А ты смотрел IL? В чем там раздница?
Конечно смотрел, а ты о какой разнице, между языками или между итераторами.
Здравствуйте, V.Petrovski, Вы писали:
VP>Здравствуйте, Mika Soukhov, Вы писали:
MS>>А ты смотрел IL? В чем там раздница? VP>Конечно смотрел, а ты о какой разнице, между языками или между итераторами.
Я о разнице в ИЛ. Из твоего сообщения я понял, что на VB тормозит. Так?
Здравствуйте, Mika Soukhov, Вы писали:
MS>Я о разнице в ИЛ. Из твоего сообщения я понял, что на VB тормозит. Так?
Вообще-то я говорил про возможность создания на C#1.0 типизированного итератора,
который работает быстрее универсального IEnumerator.
А VB.NET здесь упомянут для того, что бы показать что такие итераторы можно использовать и в VB.NET
Здравствуйте, Mika Soukhov, Вы писали:
MS>А где тесты то? Я вижу только результаты сравнени языков
Вот здесь я выложил тесты.
MS>Понятно. В данном топике описано две проблемы (можно было бы и разбить на отдельные сообщения ). Я этого не увидел.
Описана одна проблема — "Как сделать типизированный Итераторов с минимальными потерями производительности".
Лучше бы я про VB вообще ничего не говорил Просто приву еще раз свою цитату.
Хотя в спецификации C#1.0 написано, что такая колекция может использоваться только в языке C#, это ЛОЖЬ.
Такую колекцию можно использовать и в VB.NET.
Здравствуйте, V.Petrovski, Вы писали:
VP>Здравствуйте, Mika Soukhov, Вы писали:
MS>>А где тесты то? Я вижу только результаты сравнени языков VP>Вот здесь я выложил тесты.
Не. Смотреть не интересно, ты лучше сам объясняй.
MS>>Понятно. В данном топике описано две проблемы (можно было бы и разбить на отдельные сообщения ). Я этого не увидел. VP>Описана одна проблема — "Как сделать типизированный Итераторов с минимальными потерями производительности".
И почему такой выигрыш у типизированных итераторов? Или ты спрашиваешь?
VP>Лучше бы я про VB вообще ничего не говорил
Правильно. Надо четко выделять проблему, а не лить воду.
VP>Просто приву еще раз свою цитату. VP>
VP>Хотя в спецификации C#1.0 написано, что такая колекция может использоваться только в языке C#, это ЛОЖЬ.
VP>Такую колекцию можно использовать и в VB.NET.
Из данного сообщения я понял, что ты научился создавать типизированные итераторы на ВБ.
Здравствуйте, Mika Soukhov, Вы писали:
MS>Не. Смотреть не интересно, ты лучше сам объясняй.
Нет, Уж будьте так любезны сами.
MS>Из данного сообщения я понял, что ты научился создавать типизированные итераторы на ВБ.
У тебя что нет разницы между словами использовать и создавать?
Здравствуйте, V.Petrovski, Вы писали:
VP>Здравствуйте, Andrbig, Вы писали:
A>>Твои собственные тесты этого не подтверждают.
VP>Мой опыт об этом говорит, и тесты тоже
Здравствуйте, V.Petrovski, Вы писали:
VP>А чтобы тесты были одинаковыми, ты вынеси описание MyVBCollection в другую сборку.
Вынес, действительно стал работать дольше. Потом я сделал то же самое и для C#. Результат — "супербыстрый" C# показал точно такое же время. Можешь проверить.
Так что пока я никаких реальных подтверждений тормознутости VB так и не увидел. Щас еще вот посмотрю про ArrayList...
Да, тормоза с ArrayList подтвердились. Такие же — в 2 раза. Ура, наконец хоть кто-то смог приложить к своим словам реальный пример тормознутости. Спасибо.
Здравствуйте, Andrbig, Вы писали:
A>Вынес, действительно стал работать дольше. A>Потом я сделал то же самое и для C#.
А зачем, объявление MyCollection и так находится в другом проекте. A>Результат — "супербыстрый" C# показал точно такое же время.
Что-то я не понял сорказма
Ты почитай в моем первом посте последнее предложение
A>Щас еще вот посмотрю про ArrayList...
Почитал последнее предложение?