avatar_Kudo^

BoR MU CheckSum Generator: Утилита для быстрой работы

Автор Kudo^, 2011 Янв. 02, 05:58

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlinechecksum generatorутилита

Kudo^

Полезная вещь, да и ещё когда быстро работает! Спасибо за проделанную работу.

MuForum

#1
Жду комментариев.
- Пожелания принимаются.


# Добавлено:
- Для любителей поболтать...
- Напоминаю, что программа написана на C# + запакована WinLicense, так что это далеко не все соки, которые можно выжать...


P.S. -> Жду сравнений с другими аналогами, особенно интересуют сравнения по времени.

AndOrXor

#2
мде...  да, и ишо Winlicense!  :wacko:

Rz - C# Multicore Checksum generator = OpenSource
Rz - C++ Checksum Cenerator = Open Source
Rz - Delphi MultiCore Checksum generator = Open Source

....

using System;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading.Tasks;

namespace MainChecksumGen
{
class Program
{
static void Main(string[] args)
{
CheckSumFile csf = new CheckSumFile();
csf.Checksums = new uint[1024];
byte[] lpFileBuffer;
int ms = 0;
try
{
using (FileStream fs = new FileStream("main.exe", FileMode.Open))
{
lpFileBuffer = new byte[fs.Length];
fs.Read(lpFileBuffer, 0, lpFileBuffer.Length);
}
int start = Environment.TickCount;
Parallel.For(0, 1024, i =>
{
csf.Checksums[i] = GetChecksum(lpFileBuffer, (uint)lpFileBuffer.Length, (ushort)i);
});

ms = Environment.TickCount - start;
using (FileStream ss = File.Create("CheckSum.dat"))
{
ss.Write(Serialize(csf), 0, 4096);
}
}
catch (FileNotFoundException e)
{
Console.WriteLine("Couldn't find main.exe. Make sure its in the same directory as the Program");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}

Console.WriteLine("Completed in {0} ms. Saved to CheckSum.dat.nPress Any Key to continue...", ms);
Console.ReadKey();
}

static uint GetChecksum(byte[] lpFileBuffer, uint dwFileSize, ushort wChecksumKey)
{
uint dwResult, dwAcc;

dwAcc = wChecksumKey;
dwResult = dwAcc << 9;

for (uint I = 0; I <= (dwFileSize - 4); I += 4)
{
uint dwKey;
//byte[] dwkey = new byte[4];
dwKey = MakeDword(lpFileBuffer[I + 3], lpFileBuffer[I + 2], lpFileBuffer[I + 1], lpFileBuffer[I]);
switch (((I >> 2) + wChecksumKey) % 3)
{
case 0:
dwResult = (uint)(dwResult ^ (int)dwKey);
break;
case 1:
dwResult += dwKey;
break;
case 2:
dwResult = dwResult << (int)(dwKey % 11);
dwResult ^= dwKey;
break;
}

if ((I % 4) == 0)
{
dwResult ^= (dwAcc + dwResult) >> (int)((I >> 2) % 16 + 3);
}
}
Console.WriteLine(wChecksumKey);
return dwResult;
}

public static byte[] Serialize(object Obj)
{
int rawsize = Marshal.SizeOf(Obj);
byte[] rawdata = new byte[rawsize];
GCHandle handle = GCHandle.Alloc(rawdata, GCHandleType.Pinned);
Marshal.StructureToPtr(Obj, handle.AddrOfPinnedObject(), false);
handle.Free();
return rawdata;
}

public static UInt32 MakeDword(byte byte1, byte byte2, byte byte3, byte byte4)
{
return (UInt32)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4);
}
}

[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 4096)]
struct CheckSumFile
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
internal uint[] Checksums;
}
}

Source: rz

MuForum

#3
Цитата: AndOrXor от 2011 Янв. 02, 10:33  мде...  да, и ишо Winlicense!  :wacko:

Rz - C# Multicore Checksum generator = OpenSource
Rz - C++ Checksum Cenerator = Open Source
Rz - Delphi MultiCore Checksum generator = Open Source

....

using System;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading.Tasks;

namespace MainChecksumGen
{
class Program
{
static void Main(string[] args)
{
CheckSumFile csf = new CheckSumFile();
csf.Checksums = new uint[1024];
byte[] lpFileBuffer;
int ms = 0;
try
{
using (FileStream fs = new FileStream("main.exe", FileMode.Open))
{
lpFileBuffer = new byte[fs.Length];
fs.Read(lpFileBuffer, 0, lpFileBuffer.Length);
}
int start = Environment.TickCount;
Parallel.For(0, 1024, i =>
{
csf.Checksums[i] = GetChecksum(lpFileBuffer, (uint)lpFileBuffer.Length, (ushort)i);
});

ms = Environment.TickCount - start;
using (FileStream ss = File.Create("CheckSum.dat"))
{
ss.Write(Serialize(csf), 0, 4096);
}
}
catch (FileNotFoundException e)
{
Console.WriteLine("Couldn't find main.exe. Make sure its in the same directory as the Program");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}

Console.WriteLine("Completed in {0} ms. Saved to CheckSum.dat.nPress Any Key to continue...", ms);
Console.ReadKey();
}

static uint GetChecksum(byte[] lpFileBuffer, uint dwFileSize, ushort wChecksumKey)
{
uint dwResult, dwAcc;

dwAcc = wChecksumKey;
dwResult = dwAcc << 9;

for (uint I = 0; I <= (dwFileSize - 4); I += 4)
{
uint dwKey;
//byte[] dwkey = new byte[4];
dwKey = MakeDword(lpFileBuffer[I + 3], lpFileBuffer[I + 2], lpFileBuffer[I + 1], lpFileBuffer[I]);
switch (((I >> 2) + wChecksumKey) % 3)
{
case 0:
dwResult = (uint)(dwResult ^ (int)dwKey);
break;
case 1:
dwResult += dwKey;
break;
case 2:
dwResult = dwResult << (int)(dwKey % 11);
dwResult ^= dwKey;
break;
}

if ((I % 4) == 0)
{
dwResult ^= (dwAcc + dwResult) >> (int)((I >> 2) % 16 + 3);
}
}
Console.WriteLine(wChecksumKey);
return dwResult;
}

public static byte[] Serialize(object Obj)
{
int rawsize = Marshal.SizeOf(Obj);
byte[] rawdata = new byte[rawsize];
GCHandle handle = GCHandle.Alloc(rawdata, GCHandleType.Pinned);
Marshal.StructureToPtr(Obj, handle.AddrOfPinnedObject(), false);
handle.Free();
return rawdata;
}

public static UInt32 MakeDword(byte byte1, byte byte2, byte byte3, byte byte4)
{
return (UInt32)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4);
}
}

[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 4096)]
struct CheckSumFile
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
internal uint[] Checksums;
}
}

Source: rz
Уважаемый... Вы сначала сравните скорости, а потом уже высказывайте своё фэ...


p.s. -> И к вашему сведению, первый алгоритм опубликовал "Deathway", а не "ВЫ"!!!
- Даты тем даже на том же RZ сравните...

Simp1e

мы должны учитывать что есть параллельность между файлами от разных разработчиков каждый пытается сделать свою программу по разному)
кто ставит себе цикл на оптимизацию программы и работоспособность)
кто кодит так чтоб работало) а на остальное по фигу

допустим AndOrXor Wz закодила сервер) или ланчер или любой файл не имеет значения) мы же пишем все эти файлы и стараемся сделать как у WZ)
Так давай кричать что мы все личеры)
MainCheckSum Generator закодили WebZen)
все ваши программы фейк)
если на то уже пошло)



MuForum

#5
Цитата: DapKUH от 2011 Янв. 02, 11:03  Пофиг если даже взял чужой код, уж наверно оптимизировал.

Отличная прога, спасибо.
Во-первых: Основой был код "Deathway", а не кого-либо...
Во-вторых: За парралелизм в C# отвечает в данном случае лишь одна функция: Parallel.For();
- Ох да простите, если я её использую, то значит я украл код... Абсурд...
В-третьих: Что в твоём склонином коде, что в коде "Deahway", что в программе от Killbrum - Везде есть ряд упущений и глупостей...
- В своём релизе я постарался это всё исправить.
В-четвёртых: Я не помню, чтобы я был замечен хоть раз в том, что затираю копирайты и ставлю свои!!!
- Если я не прав, ТКНИТЕ МЕНЯ НОСОМ И ПОКАЖИТЕ ЭТО ВСЕМ!!!


P.S. -> А хотите поразглагольствовать, так возьмите разные программы и сравните скорости, после этого уже поболтаем...

AndOrXor

#6
Цитата: MuForum от 2011 Янв. 02, 11:50  Уважаемый... Вы сначала сравните скорости, а потом уже высказывайте своё фэ...
уберитье Winlicense, я сравню! и вопше зачем Winlicense оно же думано для Лицензирование софта (WH lock etc.. )

Цитироватьp.s. -> И к вашему сведению, первый алгоритм опубликовал "Deathway", а не "ВЫ"!!!

реверсинг заного нету смисла, зачем? :)

Цитировать- Даты тем даже на том же RZ сравните...
о чом ето вы? :unsure:

Цитата: Simp1e от 2011 Янв. 02, 12:06  мы должны учитывать что есть параллельность между файлами от разных разработчиков каждый пытается сделать свою программу по разному)
кто ставит себе цикл на оптимизацию программы и работоспособность)
кто кодит так чтоб работало) а на остальное по фигу

согласен, но зачем Winlicense там же 5 строк кода!!! Все знают ети строчки

PUSH EBP
MOV EBP,ESP
PUSH ECX
MOV EAX,DWORD PTR SS:[EBP+8]
AND EAX,0FFFFh
XOR EAX,0B479h
MOV WORD PTR SS:[EBP-4],AX
MOV EAX,DWORD PTR SS:[EBP-4]
AND EAX,0FFFFh
SAR EAX,0Ah
SHL EAX,4
MOV ECX,DWORD PTR SS:[EBP-4]
AND ECX,0FFFFh
AND ECX,0Fh
OR EAX,ECX
MOV ESP,EBP
POP EBP
RETN

MuForum

#7
# Пак из 3 программ и main.exe для сравнения: BoR, P4F, Deathway;
- SendSpace.Com - Скачать;

# Исходники и исполняемый файл Deathway:
- SendSpace.Com - Скачать;


P.S. -> Жду результатов тестирования...

BeL4eNaK

#8
Вот что мне нравится в программках от Санька, то что все всегда работает именно так, как ты этого ждешь. Никаких косяков или несостыковок. Быстро, удобно, интуитивно понятно, и даже я, такой далекий от технической части человек сможет разобраться.

MuForum

#9
# Результаты тестирования 2-ядра: (Ноутбук)
ЦитироватьFile 'MyMain.exe' is selected. (Size: 5,462 MByte)
The program uses '2' logical processors.

BoR v1.0.0.80: ~8,731 сек;
P4F v0.2: ~23 сек;
Deathway: ~16 сек;

# Стенд:
Processor: Intel Mobile Core 2 Duo P7350;
Memory: 2x2048 MByte DDR2-800 CL-6;

# Результаты тестирования 4-ядра: (Персональный компьютер)
ЦитироватьFile 'MyMain.exe' is selected. (Size: 5,462 MByte)
The program uses '4' logical processors.

BoR v1.0.0.80: ~7.713 сек;
P4F v0.2: ~57 сек;
Deathway: ~28 сек;

# Стенд:
Processor: AMD Phenom II X4 945;
Memory: Team 2x2048 MByte DDR3-1600 CL-7;


P.S. -> Вот теперь думаю результат на лицо...

MOHAPX

Как всегда местные ассенизаторы готовы поливать дерьмом любую инициативу. При чём даже не пытаются практически проверить чтобы блеснуть объективностью. Просто посоревнуются кто смачнее нагадит, раздадут друг другу "спасибки" и свалят удовлетворённые. И главное не вникаясь в созданную прогу, не зная её функционала, обязательно выдвинут теорию дерьмовыводов.
Тем не менее, Санёк за что бы не взялся, так выдаёт обязательно шедевр. Пусть это будет один из лучших античитов, или как тут, небольшая, но очень шустрая прога. И правильно делает, что закрывает её Winlicense. Вполне достаточно, что она бесплатная.
Проверил на одном из компов с 3-мя ядрами (AMD). Работает в 4...5 раза быстрее, по сравнению с "[P4F] CheckSum Generator". И речь идёт не о пару секундах, а более чем на минуту разницы. Файл объёмом 5,5Мб прога Санька обработала всего за 21 сек., а P4F аж за 100 сек. Разница почти в 5 раз! Достойный результат. Да и корректность проверки, как и достижение скоростных качеств, у Санька всегда на высоте. Молодец.
------------
P.S. Дерьмоплюям ещё можно было бы иронизировать если бы прогресс был всего на 10...20%. Но если придётся обработать файл в 10...20Мб и выше, то думаю однозначно выбор будет сделан именно для этой проги. Так как разница в обработке уже будет измеряться десятками минут.

MuForum

Цитата: epmak от 2011 Янв. 02, 14:12  
Спойлер
хм, вообще инетересно, фреймворк выходит лучше чем просто С/с++ работает  с амд Оо
[свернуть]
Нет, C# медленнее чем C++.
Во-первых: C# - Это виртуальная машина, C++ - Native язык...
Во-вторых: У C# очень медленная обработка графики.
В-третьих: Если написать аналогичную программу на C++, то разница будет примерно в 1.4 раза... (Не могу точно утверждать)

Вся изюминка в алгоритмах обработки и распараллеливании, а не в языках программирования...

Profesor08

#12
Цитата: epmak от 2011 Янв. 02, 11:44  суть программирования  - программа, удовлетворяющая потр*бительским спросам, имхо. В принципе, быстрота работы - вещь приятная, но не всегда самая важная.
Тоесть главное чтоб работало? Неважно как, работает и хорошо...


Задача: х не должен равняться цыфрам от 0 до 9.

if (x < 0 && x > 9) ...

if (x!=0 && x!=1 && x!=2 && x!=4 && x!=5 && x!=6 && x!=7 && x!=8 && x!=9) ...

if (x==0) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==1) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==2) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==3) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==4) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==5) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==6) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==7) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==8) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else if (x==9) { Сообщ: х не должен равняться цыфрам от 0 до 9. }
else { ... }

Исходя из твоих соображений все эти примеры - идеальны.
Да они все работают, но второй и третий - ГОВНОКОД, программист никогда такого не сделает, именно программист...

SmallHabit

#13
Всегда приятно почитать срач на х-му попивая кофе =)

ЦитироватьCPU : Intel Core2Duo E8400, 3.4Ghz
Memory : DDRII-800 2x2GB
Spent: 3,974 sec

ЦитироватьCPU : Intel Atom N550, 1.5Ghz
Memory : DDRIII-1066 1x1GB
Spent: 36,077 sec
Учитывая что програмулина написала громкую надпись "The program uses '4' logical processors."

ЦитироватьCPU : Intel Core2Duo T6500, 2.1Ghz
Memory : DDRII-800 2x2GB
Spent: 7,236 sec

И теперь вопрос

ЦитироватьBoR v1.0.0.80: ~7.713 сек;
P4F v0.2: ~57 сек;
Deathway: ~28 сек;

# Стенд:
Processor: AMD Phenom II X4 945;
Memory: Team 2x2048 MByte DDR3-1600 CL-7;

Почему Phenom II X4 обрабатывает маин 7 секунд, а какой-то старенький C2D E8400 за 4 секунды управился? Я уже не говорю о памяти ДДР2 =)

ЦитироватьPhenom II X4 945   3,0 ГГц   L3 : 6 Мбайт Cores : 4
ЦитироватьIntel Core 2 Duo E8400    3,0 ГГц   L2 : 3 Мбайт  Cores : 2

epmak

Цитата: Profesor08 от 2011 Янв. 02, 15:20  Исходя из твоих соображений все эти примеры - идеальны.
Да они все работают, но второй и третий - ГОВНОКОД, программист никогда такого не сделает, именно программист...
я имел ввиду целесообразность создавать велосипед заново, если никто шибко не жаловался, это во-первых.
Во-вторых, есть поговорка "кашу маслом не испортишь", хотя она неверна. Иногда более рациональнее оставить все как есть, а не изобретать то, что уже сделано.(это из истории, давайте напишем класс, чтобы сделать 1 единственный запрос в базу данных...)
кривой код я даже не брал во внимание, так как по умолчанию, ВСЕ стремятся к хорошему коду из числа, как ты выразился "именно программист".

AndOrXor

#15
BOR не умеет воспринимать критку!
и все кто не хвалит его чудо либо диблы либо туалетники!  

MuForum

#16
Цитата: SmallHabit от 2011 Янв. 02, 15:24  ...
И теперь вопрос
Почему Phenom II X4 обрабатывает маин 7 секунд, а какой-то старенький C2D E8400 за 4 секунды управился? Я уже не говорю о памяти ДДР2 =)
Видимо JIT компилятор генерирует IL код лучше для архитектуры Intel, чем для AMD.
- Собственно я не думаю, что тут есть что-то удивительное.


Цитата: AndOrXorBOR не умеет воспринимать критку!
и все кто не хвалит его чудо либо диблы либо туалетники!
Дело как раз не в этом, а в том, что вы не разобравшись начинаете лезть со своими нравоучениями и потыканиями....


P.S. -> Сейчас опубликую архив из 2 разных main.exe из которых на одном все MCSG будут падать...
+ Каждый чтобы сам протестировал на своём компьютере разницу...
+ Генератор от P4F не корректно работает... Он каждый раз генерирует разные контрольные файлы... (Каждый сам может в этом убедиться...)


# Добавлено: Архив из 3-х программ(BoR, P4F, Deathway) и 2-х main.exe;
Цитироватьhttps://www.sendspace.com/file/0mn29u
https://www.megaupload.com/?d=O0ZPNFM7


P.S. -> А вот теперь можно подискутировать на тему... Что я изобрёл велосипед...
- Откройте любой .exe файл размеров до 20 МБайт и посмотрим...
- Я использую тот же алгоритм что и все остальные программы, но он оптимизирован, изменен и распарралелин.

# Внимание! Напоминаю, что после перезагрузки компьютера при первом запуске программы написанной на DOT.NET, программа будет тормозить...
- Необходимо первый раз запустить, начать сканирование, остановить, закрыть программу и открыть снова. Вот тогда вы увидеть полную скорость.
- Ещё раз повторяюсь, это уже специфика DOT.NET, а не лично моей программы...

AndOrXor

#17
ЦитироватьP.S. -> А вот теперь можно подискутировать на тему... Что я изобрёл велосипед...
- Откройте любой .exe файл размеров до 20 МБайт и посмотрим...
- Я использую тот же алгоритм что и все остальные программы, но он оптимизирован, изменен и распарралелин.

вот только зачем,  ета + / - 1,2 секунда/ы нечево неменяет! хотитье скорость?! пишите на asm

ну ета так.. мне только Winlicense ненравитса :) я жуткй параноик

MuForum

#18
Цитата: AndOrXor от 2011 Янв. 02, 22:29  вот только зачем,  ета + / - 1,2 секунда/ы нечево неменяет! хотитье скорость?! пишите на asm

ну ета так.. мне только Winlicense ненравитса :) я жуткй параноик


# Результаты тестирования 2-ядра: (Ноутбук)
ЦитироватьFile 'MyMain.exe' is selected. (Size: 5,462 MByte)
The program uses '2' logical processors.

BoR v1.0.0.80: ~8,731 сек;
P4F v0.2: ~23 сек;
Deathway: ~16 сек;

# Стенд:
Processor: Intel Mobile Core 2 Duo P7350;
Memory: 2x2048 MByte DDR2-800 CL-6;

# Результаты тестирования 4-ядра: (Персональный компьютер)
ЦитироватьFile 'MyMain.exe' is selected. (Size: 5,462 MByte)
The program uses '4' logical processors.

BoR v1.0.0.80: ~7.713 сек;
P4F v0.2: ~57 сек;
Deathway: ~28 сек;

# Стенд:
Processor: AMD Phenom II X4 945;
Memory: Team 2x2048 MByte DDR3-1600 CL-7;


Если по вашему, это 1-2 секунды, то извините...
- Тут речь идёт о том, что разница по сравнению с P4F в на 4-х ядрах в 7 раз, на 2-х ядрах в 2.6 раза; с Deathway на 4-х ядрах в 4 раза, на 2-х ядрах в 2 раза.
- Уж извините, я вроде не слепой, но тут разница явно не в "1-2 секунды"...


P.S. -> Специально для вас и таких как вы, я опубликовал архив, в котором 3 программы и 2 main.exe
- Не поленитесь и протестируйте, прежде чем "лиж-бы" писать...

Imp0ssible

#19
ЦитироватьP.S. -> Жду сравнений с другими аналогами, особенно интересуют сравнения по времени.
Попробуемс)

## здесь был скриншот ##

## здесь был скриншот ##

Сама софтинка



Вес: 13Кб;
Требования: Framework 4.0;
Язык : C#;
Б/У - без упаковки (not packed)
Я новичек, это факт и все это знают
Понятия "оптимизация" пока не мое, но...
Попросили аналог, сделали )


ПюСю: Прот не снимал, код не рефлектил

Похожие темы (4)

Сообщений: 23
Просмотров: 18708

Сообщений: 5
Просмотров: 2357

Сообщений: 9
Просмотров: 4040