2009-06-19 2 views
0

Я преобразовал наш проект с .NET 2.0 в 3.5 и ищу оптимизацию, которая может быть выполнена с использованием 3.5 framework. Каковы некоторые из вещей, которые я могу сделать с 3.5, как в Datastructures. Также любые предложения по использованию DataAccess, помимо LINQ to SQL. Любые предложения/указатели были бы замечательными. Я не рассматриваю какую-либо конкретную оптимизацию, просто генерал. Я также использую VB.NET :(Оптимизация .NET 3.5 после преобразования от 2.0 до 3.5

+1

Самая большая оптимизация, которую вы можете сделать, это перейти на C#. – Randolpho

ответ

2

Эта ссылка в значительной степени дает вам все новые VB 9.0 Обзор функций:

http://msdn.microsoft.com/en-us/library/ms364068.aspx

  • Неявно типизированные локальные переменные
  • объектов и массивов Инициализаторы
  • Анонимные типы
  • Deep XML Поддержка
  • Запрос постижений расширения
  • Методы и Лямбда-выражения
  • Обнуляемые Типы
  • Расслабление Делегаты
3

Я не совсем уверен, что вы имеете в виду оптимизации. Вы можете уточнить немного?

3.5 рамки и соответствующий VB.Net компилятор не столько о оптимизация, но гораздо больше о концепциях, связанных с LINQ (языковой интегрированный запрос). Это способ определения общего языка запросов, несколько напоминающего SQL, который может использоваться в самых разных источниках.

Например, скажем, вы имел список учеников и хотел захватить те, у которых было определенное имя. До LINQ вы должны написать примерно следующее:

Dim list As New List<Student>() 
For Each cur in col 
    if cur.Name = SomeName Then 
    list.Add(cur) 
    End If 
Next 

LINQ значительно упрощает это, позволяя записать следующее

Dim result = From cur in col Where cur.Name = SomeName 
4

Это в некоторой степени зависит от C#, потому что вы не можете писать итераторы в VB.Net. Но для меня большое улучшение производительности - это комбинированный метод Iterator + Extension Method + lambda. Итераторы были доступны также в .Net 2.0, но когда вы объединяете их с методами расширения IEnumerable, у вас внезапно появляется очень мощный инструмент оптимизации.

Например, у вас есть код для чтения файла и получения всех строк, содержащих определенный текст. В .Net 2.0 вы либо используете File.ReadAllLines, либо итерации по потоковому считывателю. В .NET 3.5 вы можете обернуть читатель потока с итератором и писать код так:

ReadLines(@"C:\MyFile.txt").Where(l => l.Contains("search text")); 

Теперь это не все, что особенное, потому что вы можете написать код, который получает близко к нему в .NET 2.0. Но на самом деле классная вещь, что вы можете продолжать добавлять фильтры:

var query = ReadLines(@"C:\MyFile.txt") 
          .Where(l => l.Contains("search text")) 
          .Select(l => int.Parse(l.SubStrin(5,8)) 
          .Where(i => i > 10); 

int sum=0; 
foreach (int value in query) 
{ 
    sum += value; 
} 

Поп викторины — сколько раз этот код итерацию по результатам файлов? Ответ в точности один. Добавление нового .Where() или .Select() не приводит к повторному завершению результатов. Скорее, он откладывает выполнение для создания своего рода конвейера для вашего перечисления.

Для получения такой же производительности в .Net 2.0 вам придется либо написать гораздо более длинную функцию, которая включает в себя открытие и чтение через файл, иметь гораздо более сложный класс для реализации IEnumerable или широко использовать пользовательские делегаты, которые большинство программистов не поймут.

Это позволяет вам абстрагировать код, который читает файл, очень простым и очень многоразовым способом, так что теперь язык поддается написанию эффективного кода. Самое интересное, что вы можете использовать это из VB.Net: вам просто нужно иметь сборку на C# где-нибудь, чтобы сохранить итераторы, которые вы хотите записать, а затем ваш код VB.Net будет выглядеть так:

Dim query = ReadLines("C:\MyFile.txt") _ 
         .Where(Function(l) l.Contains("search text")) _ 
         .Select(Function(l) Integer.Parse(l.SubString(5,8)) _ 
         .Where(Function(i) i > 10) 

Dim sum As Integer = 0 
For Each value As Integer In query 
    sum += value 
Next value 
+0

Это действительно здорово спасибо – Greens

1

VB 9 имеет примитивный тип прохладное XML, который позволяет сделать:

Dim book As XElement = _ 
    <book category="fiction" isbn=<%= isbnNumber %>> 
     <modifiedDate><%= modifiedDate %></modifiedDate> 
    </book> 

который довольно круто! (код, взятый из msdn)

+0

да, это круто. Это единственная функция (синтаксический сахар) VB, который я желал, был в C# –

0

Если вы используете дистанционное управление или сериализацию в версии 2.0, вы можете переключить его на удаленный/сериализатор WCF сейчас, и из того, что я прочитал, вы увидите, что высокая производительность увеличивается.

+0

Nice man thanks – Greens

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