Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Файлы Добавлено: 04.11.06 11:59  

Автор вопроса:  VβÐUηìt | Web-сайт: смекаешь.рф

Ответить

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

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #16
Добавлено: 06.11.06 08:58
А Binarry считывать запись с каким номером?

Ответить

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #17
Добавлено: 06.11.06 09:34
Можно ли в тексте держать спец символы или всё надо приводить к тексту.
Если можно хранить только символы и никаких других (типа байт 0, 1 и т.д.), тогда придётся перегонять каждый байт в символ (типа 000, 001, или в 16ричную систему, тогда понабится 2 символа для хранения числа 256). Если же можно, то всё очень просто делается

В файле можно держать хоть всю бадягу ASCII. Другое дело, как ее туда засунуть?

Ответить

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #18
Добавлено: 06.11.06 09:35
Это совсем не текст.

Совсем не требуется, чтобы там можно было что-то разобрать. Главное - чтобы программа смогла выцепить от туда текст и картинку.

Ответить

Номер ответа: 19
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #19
Добавлено: 06.11.06 14:50
Не, если будешь юзать апи вместо встроенных функций и разворачивать циклы всё будет по скорости сносно. Эксперементировать над

Ответить

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #20
Добавлено: 06.11.06 15:16
всё будет по скорости сносно

1. В каких рамках сносно? Скажем для 640х480?
2. Ra$cal, чем тебе не нравится идея с бинарой?

Ответить

Номер ответа: 21
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #21 Добавлено: 06.11.06 16:15
Можно и наоборот, ссылку в картинке держать, но нужно чтобы все было в одном файле...

мда... помойму ситуация тут пропавшая, тебе что в лоб что полбу :))

2 Rascal безполезно, ему или готовое, или флудить можно до ээээ объемов

Ответить

Номер ответа: 22
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #22
Добавлено: 06.11.06 16:25
1) Очень много условий. Первое, какого формата картинка. Вообще, ты же работать будешь с картинкой как с одним участком памяти, не вдаваясь в детали формата. Отсюда вывод - главное размер картинки. Теперь, пусть картинка 100 килобайт. Это 102400 байт. Раз ты говоришь, что все символы прокатят, то переводить в другой вид байты не надо. Ты знаешь размер картинки. Знаешь размер текста. Составляешь структуру файла [1байт тип - текст или картинка][4 байта размер данных][сами данные]. Соотв создаёшь массив нужного размера и заполняешь поля. У тебя получается цельный кусок данных. Запись текста и картинки вообще желательно делать через memcpy (это в С++, оптимизированная функция).
Провёл эксперимент. Написал прогу на с++. Вот код


BYTE* file = (BYTE*)OpenFile ("test.bin";);
if (file == 0)
system("pause";);

BYTE* temp;
temp = (BYTE*)VirtualAlloc(0, Size, MEM_COMMIT, PAGE_READWRITE);
if (temp == 0)
system("pause";);
unsigned long CounterBefore, CounterAfter;

CounterBefore = GetTickCount();
memcpy (temp, file, Size);
CounterAfter = GetTickCount();
std::cout << CounterAfter-CounterBefore << std::endl;

CounterBefore = GetTickCount();
memcpy (temp, file, Size);
CounterAfter = GetTickCount();
std::cout << CounterAfter-CounterBefore << std::endl;

CounterBefore = GetTickCount();
memcpy (temp, file, Size);
CounterAfter = GetTickCount();
std::cout << CounterAfter-CounterBefore << std::endl;

CloseFile(file);
system("pause";);


Просто октрывает файл, выделяет память размером с файл, и копирует туда файл. 3 раза копирую на всякий пожарный из-за особенностей работы с диском (кэшируется всё не сразу). Так вот. Файл размером 74 кило скопирован за 0 миллисекунд. Файл размером 5 мегабайт скопирован за 16 миллисекунд. Думаю понятно на счёт скорости
2) Фиг знает что за бинара, есть подозрение это ты про открытие файла средствами васика. Пойми, из-за упрощений работы делается лишняя работа. Когда ты вызываешь апи, ты чётко знаешь какой объём работы выполняется (минимальный. правда это относительно. сами апи много чего делают, но это минимум. ибо по другому никак. а васик мало того что апи вызывает, он ещё сам колдует много). Вот отсюда могут быть потери. Делай через маппинг работу с файлом, который надо только читать и менять в нём чт-нибудь (дополнение через маппинги немного неудобны)

Ответить

Номер ответа: 23
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #23
Добавлено: 06.11.06 16:43
void my_memcpy(byte* dest, byte* src, int size)
{
for (int i = 0; i < size; i++){
dest[i] = src[i];
}
}

давно хотел проверить скорость такой функции и мемспу :) Так вот. Компилил с опитимизацией скорости и под pentium4. Файл размером 66.6 мегабайта (какое число :) циклом перекидывается за
250
156
266
memcpy же это делает за
93
110
109
Хвала memcpy. Как видим в 2 раза быстрее

2Hacker
да мне просто самому любопытно было. Я давно уже подумывал проверить эту фигню :)

Ответить

Номер ответа: 24
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #24 Добавлено: 06.11.06 17:02
Помню наш сишник, препод в универе пливался на меня, когда мы структуры проходили... Я различные манипуляции с ними через memcpy делал, а он мне говорил что мол самому написать быстрее будет по скорости работы... т.к. апи много чего проверяет, итп...

А с твоего теста видно что препод был неправ. Я это собственно знал с самого начала, просто жаль что небыло человека вовремя который бы это подтвердил. Так что спасибо :)

Чтобы было ещё быстрее

.asm
...
:)

Но это тема моего второго курса, аССЯмблер :)

Ответить

Номер ответа: 25
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #25
Добавлено: 06.11.06 17:17
:) это не апи. это CRT функция. Ну а быстрее ты на асме не напишешь. У асма компилятор не потимизирующий. Ты сам будешь вынужден вспоминать, при каких последовательностях команд процессор работает быстрее. Сколько тактов отводится при определённых наборах. Про штрафы, про неправильно предсказанные переходы. про простой конвеера. А ты прочитай статью Криса Касперски про профайлинг и оптимизацию программы с помощью VTune. Ты НИКОГДА не оптимизнёшь лучше, чем компиль толковый. Максимум что у тебя получится, это немного доделать результат работы компилятора(есено юзая профайлер, просто в уме уже мало толку оптимайзить). Заодно посмотри на дизасм memcpy. Она просто за проход 4 байта копирует. Кста ощутил всю силу оптимизатора в 2005 студии. Написал хук библиотеку, отоаживать студия её не может. Отлаживал в Olly. Он хоть и пишет, что за строка кода на С++ соответствует строке кода дизасма, но там было нечто. Строки перепутаны. То есть ща вроде должна быть первая строка сорца, а по регистрам видно, что нифига, это четвёртая. Потом вторая, потом первая, кароч полное мясо. Вот это было оптимизация для конвеера команд процессора. Пришлось отрубить нах, ибо мосх сломался уже ччерез пол часа. И ЭТО ОТЛАЖИВАЯ СВОЙ КОД :)

00401BEF   |.  F3:A5            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]

Ответить

Номер ответа: 26
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #26
Добавлено: 06.11.06 17:49
А strcpy-то какой красивый в CRT...
while(*dest++ = *src++);

Ответить

Номер ответа: 27
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #27
Добавлено: 06.11.06 18:04
Мне больше всего нравится strlen (хотя не уверен, мож другая функция). Там по четыре символа (их значения сразу в регистр). Потом AND eax, 8f8f8f8f вроде (но суть в AND ЧИСЛО). Потом решает ниже, есть ноль или нет. Вроде strlen... А может strcmp

Ответить

Номер ответа: 28
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #28 Добавлено: 09.11.06 11:18
По сабжу:
1. RTB & RTF
2. File header & MIME.
:)

Ответить

Номер ответа: 29
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #29 Добавлено: 09.11.06 14:43
Ну чего ж, сложность инструкции можно и в уме оценить, приблезительно ессно... можно вместо функций макросы подставлять, можно оптимизировать переменные до разумной длинны, ну много чего ещё в уме оптимизировать можно :) Всем этим в большей или меньшей степени и сам компилятор знимается, но я думаю лучше и самому, и + потом ещё компилятор :)

Ответить

Страница: 1 | 2 |

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



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