Я использую protobuf-net в приложении ac # для загрузки и сохранения «файлов проекта» моей программы.При сохранении времени программа создает объект ProjectData и добавляет к нему множество различных объектов - см. Общий принцип ниже.
static ProjectData packProjectData()
{
ProjectData projectData = new ProjectData();
projectData.projectName = ProjectHandler.projectName;
foreach (KeyValuePair<int, Module> kvp in DataHandler.modulesDict)
{
projectData.modules.Add(serializeModule(kvp.Value));
}
return projectData;
}
[ProtoContract]
public class ProjectData
{
[ProtoMember(1)]
public List<SEModule> modules = new List<SEModule>();
[ProtoMember(2)]
public string projectName = "";
}
После создания он архивируется и сохраняется на диск.Проблема, с которой я сталкиваюсь, заключается в том, что, когда число модулей становится очень большим (более 40 000), System.OutOfMemoryException сообщается во время функции packProjectData.
Я уже видел подобные вопросы, которые уже задавались, но они несодержать четкий ответ для решения проблемы.Если кто-нибудь может дать мне либо конкретное решение, либо общий принцип, которому нужно следовать, я буду очень признателен.