У меня есть программа, которая хранит кучу экземпляров структур, содержащих множество членов типа double. Время от времени я выгружаю их в файл, что я делал с помощью построителя строк, например. :
StringBuilder builder = new StringBuilder(256);
builder.AppendFormat("{0};{1};{2};", x.A.ToString(), x.B.ToString(), x.C.ToString());
где 'x' - это экземпляр моего типа, а A, B, C - члены X типа double. Я вызываю ToString () для каждого из них, чтобы избежать бокса. Однако эти вызовы ToString по-прежнему выделяют много памяти в контексте моего приложения, и я хотел бы уменьшить это. Я думаю, что нужно иметь массив символов и записывать каждый член прямо в него, а затем создавать одну строку из этого массива символов и выгружать ее в файл. Несколько вопросов:
1) Разумно ли то, что я собираюсь делать? Есть ли что-нибудь, что уже могло бы достичь чего-то подобного?
2) Есть ли уже что-то встроенное для преобразования двойного в массив символов (что, я думаю, будет с некоторой параметризованной точностью?). В идеале я хочу передать свой массив и некоторый индекс и начать писать туда.
Причина, по которой я пытаюсь это сделать, состоит в том, чтобы уменьшить большие всплески памяти, когда мое приложение работает, поскольку я запускаю много экземпляров и часто оказываюсь ограниченным памятью.
Ура А
StringBuilder
- это перебор для таких простых конкатенаций. - person asawyer   schedule 06.06.2012builder.AppendFormat("{0};{1};{2};", x.A, x.B, x.C)
? - person Tim Schmelter   schedule 06.06.2012ToString()
наdouble
выделит новый объект в куче, эффективно упаковывая двойное значение в строку, чего вы и хотите избежать. - person Martin Liversage   schedule 06.06.2012Double.ToString()
отменяет метод базового класса и не вызывает бокса. См. Также: stackoverflow.com/questions/436363/ - person Martin Liversage   schedule 06.06.2012