Я разрабатываю приложение, которое использует очень большие таблицы поиска для ускорения математических вычислений. Самая большая из этих таблиц - это int [], которая имеет ~ 10 миллионов записей. Не все таблицы поиска являются int []. Например, один словарь с ~ 200 000 записей. В настоящее время я генерировать каждую таблицу поиска один раз (который занимает несколько минут) и сериализовать его на диск (со сжатием), используя следующий фрагмент кода:Хранение таблиц большого поиска
int[] lut = GenerateLUT();
lut.Serialize("lut");
, где Сериализация определяются следующим образом:
public static void Serialize(this object obj, string file)
{
using (FileStream stream = File.Open(file, FileMode.Create))
{
using (var gz = new GZipStream(stream, CompressionMode.Compress))
{
var formatter = new BinaryFormatter();
formatter.Serialize(gz, obj);
}
}
}
досада, которую я испытываю при запуске приложения, заключается в том, что десериализация этих поисковых таблиц занимает очень много времени (более 15 секунд). Этот тип задержки будет раздражать пользователей, так как приложение будет непригодным до тех пор, пока не будут загружены все таблицы поиска. В настоящее время десериализации выглядит следующим образом:
int[] lut1 = (Dictionary<string, int>) Deserialize("lut1");
int[] lut2 = (int[]) Deserialize("lut2");
...
где Deserialize определяется как:
public static object Deserialize(string file)
{
using (FileStream stream = File.Open(file, FileMode.Open))
{
using (var gz = new GZipStream(stream, CompressionMode.Decompress))
{
var formatter = new BinaryFormatter();
return formatter.Deserialize(gz);
}
}
}
Сначала я думал, что это, возможно, было сжатие GZIP, который вызывает замедление, но удаление это только обезжиренное в нескольких сотнях миллисекунд из процедур Serialization/Deserialization.
Может ли кто-нибудь предложить способ ускорения времени загрузки этих таблиц поиска при первом запуске приложения?
Я согласен с этим, но это все-таки обходное решение imo. Что касается моего приложения, gui достаточно просто, чтобы пользователь был готов выполнить вычисление менее чем за 5 секунд. Поэтому на данный момент я стремлюсь к времени загрузки 5 секунд или меньше (где таблицы поиска будут загружены в фоновом режиме менее чем за 5 секунд). – snazzer