Евгений Беловолов: "через OpenDialog" в общем то ничего не говорит:) Если сертификат читается, можно к примеру сравнить его класс, на корневых обычно используется класс выше чем на личных, ну и по другим параметрам сертификата можно проверить, например роли, для которых он может использоваться.
В общем согласен со всем, теоретически ничего сложного в управлении таким контролом быть не должно, фактически он мог бы работать как массив из N элементов, отображением которого занимается контрол, в общем я его так и реализовал, фактически он отображает N элементный массив на M*K плоскость, где каждому элементу из N соответствует единственный элемент из M*K, короче алгебра рулит:)
Сделать было не сложно, я просто думал что такой костыль ктото раньше уже делал, но так и не нашел ничего похожего.
akass: все правильно, насчет длины куска в задаче ни слова, код же расчитан на длину куска в 4 символа, а тут 5 соответственно не хватает еще 1 if либо переписать кусок в котором 3 IF на "универсальный" перебирать все до n-1 символов.
Обдумал немного ваш ответ, возможно 1 все таки имеет смысл, на создание потока нужно время, когда потоки создаются часто (чего другие менеджеры не делают) может суммарно уйти больше времени, поэкспериментирую с длиной потока, спасибо за совет.
Не совсем так, как отметил Артем, это работает только с нормальными провайдерами, в моем же случае провайдер жестко режит скорость на каждом потоке до 32кбит, и даже если у тебя 100500 мбит тариф скорость в DM будет максимум 32*8 кбит, но если качать мелкими частями (по 300кбайт скажем) то провайдер этот факт пропускает (шейпер не срабатывает) и скорость не режется, таким образом скорость отдельного потока вырастает до 300-400кбит, если потоков много скорость возрастает до максимума, который вытягивает провайдер. Отсюда и выходит 2-3 раза, цифры взяты тупо секундомером, несколько замеров на загрузку одного и того же файла.
1. Блокировки маловероятны, т.к. общих объектов как таковых нет, загрузка каждого фрагмента идет внутри отдельных объектов, запуск каждого потока проходит через Parallel taskи, единственное используется система eventов для передачи статусов, я пока только начал изучать eventы не уверен блокирует ли вызов события поток?
2. Маловероятно, т.к. download master с которым я сравнивал тоже использует многопоточность (но всего 5 потоков).
akass: так и есть та что в примере сложилась АГЦЦГГУААЦЦ, но как я и говорил задача имеет не единственное решение, поэтому их 2, какое из них "правельней" выбрать нельзя, они оба правильные в контексте задачи. Об ограничении я и говорил, когда сказал что она не полна)
По поводу графа фактически это он и есть ("чтобы понять рекурсию нужно понять рекурсию"), только вместо таскания рекурсивно информации о связях в графе переносится уже склеенная исходная последовательность.
По поводу "Попробовал дать на вход куски из которых вручную можно сложить , выдает "не вышло", можно эти куски глянуть, по идее не должно получиться так что "не вышло", возможно гдето затисались пробелы лишние или чтото в этом духе.
если эти ошибки исправить уже будет какой либо результат, в текущем виде код даже одной цепочки не построит т.к. return ConcatRecursive("", genoms);
в "" нет подстроки ни с каким геном
еще:
+ ""; - это что?
if (gen.EndsWith(genoms[j].Substring(0, 3)))
{
newgen = string.Concat(gen, genoms[j].Substring(3)); - это лучше вынести в отдельную функцию, чтобы упростить код
Neuroware: ошибка есть в этой функции string GetConcatGenom(List genoms) тут должно быть
для каждого фрагмента (мы ведь не знаем какой из них первый) вызываем рекурсивную функцию с параметрами
то есть нужно перебрать все из списка genoms и для каждого вызвать функцию ConcatRecursive где первый параметр это выбранный геном (1штук) и второй параметр это genoms без выбранного гена (новый список)