Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2012, 11:09   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Производительность TagLib.File.Create

Вообщем использую в проекте библиотеку TagLib, но возникла огромная проблема с одной из ее функций такой как TagLib.File.Create. Добавление элементов в какой либо из списков как (ListView, ListBox) при ее использование стало очень медленным. Например, 16гб без этой функции заполняются примерно в несколько секунд 2-4сек максимум а при ее использование время доходит почти до минуты. Элементы добавляю через ObservableCollection.
Я думаю идея понятно, мой ListBox или ListView получает информацию о песни в момент добавления. Кто может подсказать как это дело сделать быстрее? как отпимизировать? За ранее благодарен за любую помощь.

Код:
  public class LibraryArtists
  {
   public string Img
   { get; set; }
   public string Artist
   { get; set; }
   public string TrackTitle
   { get; set; }
   public string Album
   { get; set; }
   public string Time
   { get; set; }
   public string FileDir;

   public LibraryArtists(string FilePath)
   {
    TagLib.File file = TagLib.File.Create(FilePath);

    this.Img = Directory.GetCurrentDirectory() + "/emusic/emusic_style/tracks_image.png";

    try
    {
     if (file.Tag.FirstPerformer.Length != 0)
      this.Artist = file.Tag.FirstPerformer;
    }
    catch (Exception)
    {
     this.Artist = "NoArtist";
    }

    try
    {
     if (file.Tag.Title.Length != 0)
      this.TrackTitle = file.Tag.Title;
    }
    catch (Exception)
    {
     this.TrackTitle = Path.GetFileName(FilePath);
    }

    try
    {
     if (file.Tag.Album.Length != 0)
      this.Album = file.Tag.Album;
    }
    catch (Exception)
    {
     this.Album = "NoAlbum";
    }

    this.Time = TimeSpan.FromSeconds((file.Properties.Duration.Minutes * 60) + file.Properties.Duration.Seconds).ToString();

    this.FileDir = FilePath;
   }

   public string GetFileDir
   {
    get { return FileDir; }
    set { FileDir = value; }
   }
  }
coNsept вне форума Ответить с цитированием
Старый 09.04.2012, 11:31   #2
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

UI как я понял тормозит ?.. Может в отдельный поток засунуть ? В Dispatcher формы к примеру эти подсчеты.. Либо в студии профайлер производительности есть им могёшь поглядеть что отъедает много времени..
Guy вне форума Ответить с цитированием
Старый 09.04.2012, 11:41   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Хм, скорее всего решение этому нет, точнее оно есть но оно немного с другим подходом. Загружать в ListView в моем случае имя файла это как TrackTitle получается, ну и отдельно в потоке потихоньку грузить уже остальную информацию о песнях с помощью TagLib. После полной загрузки обновить ObservableCollection и соответственно ListView. Такой подход я заметил в Aimp. Если у кого есть другие варианты как можно и нужно сделать чтобы было еще быстрее, с удовольствием выслушаю.

TO Guy
Не не не, загружаю элементы-то я в потоке просто сама функция сильно тяжелая так как она трек грузит в оперативную память поэтому так получается.
coNsept вне форума Ответить с цитированием
Старый 09.04.2012, 11:50   #4
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Понятна.. Тогда попробовать Студийным профайлером поглядеть что тормозит и что проотимизировать сам бог велел...
Guy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чём разница между unit, header file, cpp file? TwiX Общие вопросы C/C++ 6 29.04.2012 19:49
Could not create output file project1.exe 8adim Общие вопросы Delphi 7 24.03.2011 22:01
Could not create output file Марк Охман Общие вопросы Delphi 10 09.12.2010 17:23
Производительность БД NARKOM Софт 1 02.06.2010 13:51
Помогите с глюками Taglib в Visual Studio SynTronic Visual C++ 9 14.10.2009 13:48