Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: lock (задумался) Добавлено: 07.03.11 20:25  

Автор вопроса:  VβÐUηìt | Web-сайт: смекаешь.рф
Если я работаю с жестким диском во всяких параллельных раста-операциях, например, считываю параллельно стопицот битмапов с жесткого диска, целесообразна ли такая вася:

object hdd = new object();
Parallel.For(0, 10, i=>
{
Bitmap p;
lock (hdd)
      p = Bitmap.FromImage("image_" + i.ToString());
Blur(p);
Contrast(p);
...
});


То есть какбэ раста-код работает и без lock(hdd), но с ним вроде бы должно быть более быстро, ибо файлы все равно считываются последоватльно. Бо?


Заранее благодарен

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 07.03.11 22:04
Кто такой Bitmap.FromImage?

Кроме собственно чтения данных с диска new Bitmap(filename) (о котором, как я полагаю, должна идти речь), также должен будет выполнить обработку формата JPEG. Для этого не нужен жесткий диск, однако, он будет простаивать некоторое время, поскольку lock стоит на всю операцию.

Можно сначала выполнить чтение данных в буфер через File.ReadAllBytes, и эту операцию синхронизировать. После этого уже без синхроинзации поверх буфера кидать MemoryStream и из него создавать new Bitmap(stream)

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 08.03.11 02:10
но с ним вроде бы должно быть более быстро

сомнительно.. ибо дисковые операции в гораздо бОльшей степени зависят от конкретного винта(количество головок,об/мин,raid,кэш и т.д.) нежели от кода.
имхо, зачастую разбиение дисковых операций на разные ядра/потоки приведет к худшим резельтут чем чтение в одном единственном потоке.

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 08.03.11 03:07
В каком-то конкретном случае может быть и улучшение. Если он втечение последнего часа дрочил эти 10 несчастных файлов, то они будут покорно ждать очередного эксперимента в кеше, и, соответственно, от многопоточности может быть профит. А многопоточности там немного будет, так как, насколько я помню, без указания degree of parallelism Parallel.For запустит столько потоков, сколько логических ядер в компьютере.

При честной работе с HDD, конечно, в теории многопоточность должна дать падение скорости.

Ответить

Номер ответа: 4
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #4
Добавлено: 08.03.11 12:46
Именно поэтому я решил, что обработку можно вести в разных потоках, а считывание сделать последовательным, но с помощью Lock. Файлы эти врят ли валяются в кэше, ибо все это происходит один раз при загрузке.

То есть, пилю васю как есть (с поправкой поста 1), и добавляю распознавание SSD (ибо там параллельность - это нормально).

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам