Решето Эратосфена является способом пойти, из-за он - простота и скорость. Моя реализация в процессорное время C
#include
#include
#include
#include
int main(void)
{
unsigned int lim, i, j;
printf("Find primes upto: ");
scanf("%d", &lim);
lim += 1;
bool *primes = calloc(lim, sizeof(bool));
unsigned int sqrtlim = sqrt(lim);
for (i = 2; i <= sqrtlim; i++)
if (!primes[i])
for (j = i * i; j < lim; j += i)
primes[j] = true;
printf("\nListing prime numbers between 2 and %d:\n\n", lim - 1);
for (i = 2; i < lim; i++)
if (!primes[i])
printf("%d\n", i);
return 0;
}
для нахождения начал (на Pentium Двухъядерные 1,6 ГГц E2140, с помощью одноядерного)
~ 4 с для lim = 100,000,000
То, о чем вы на самом деле просите, - это безопасный способ представления произвольных двоичных данных в виде текста с последующим их обратным преобразованием. Тот факт, что он хранит сериализованный объект, не имеет значения.
Ответ - почти использовать Base 64 (например, Convert.ToBase64String
и Convert.FromBase64String
). Не не используйте Encoding.UTF8.GetString
или что-то подобное - ваши двоичные данные не закодированные текстовые данные, и не должны рассматриваться как таковые.
Однако разве в вашей базе данных нет типа данных для двоичных данных? Проверьте типы BLOB, IMAGE и BINARY ...
Я использовал что-то вроде этого
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, Person);
memoryStream.Flush();
memoryStream.Position = 0;
string value = Convert.ToBase64String(memoryStream.ToArray());
В основном, не сохраняют данные в виде строки в базе данных, есть blob
поля, доступные для хранения двоичных данных.
Если вам действительно нужно иметь данные в виде строки, вам нужно преобразовать ваш byte [] в строку, используя кодировку base64, и получить байт [] из строки использовать декодирование.
Разве вы не рассматривали возможность преобразования потока памяти в строку base64hex, которая будет помещена в базу данных?
byte[] mStream = memorystream.ToArray();
string sConvertdHex = System.Convert.ToBase64String(mStream)
Затем вы можете выгрузить содержимое sConvertdHex в базу данных. Чтобы десериализовать его, вам нужно сделать обратное
byte[] mData = System.Convert.FromBase64String(...)
, а затем десериализовать mData обратно в ваш объект.