2013-03-23 3 views
1

Я разрабатываю пользовательский аддон для Microsoft PowerPoint. Мой addin должен хранить большое количество двоичных данных в презентации PowerPoint. Я храню эти двоичные данные в виде строк с кодировкой base 64 в тегах представления PowerPoint. Я обнаружил, что когда презентация содержит огромное количество данных в своих тегах (например, 10+ мегабайт), PowerPoint, похоже, пропускает память при сохранении презентации. Поэтому, когда такая презентация сохраняется несколько раз, PowerPoint даже у меня заканчивается системная память и сбой.Утечка памяти PowerPoint 2010?

Я разработал очень простой C# addin, чтобы изолировать проблему. Он хранит 50 мегабайт двоичных данных в презентации, когда создается новая презентация:

private void Application_AfterNewPresentation(PowerPoint.Presentation presentation) 
{ 
    int tagLength = 5 * 1000 * 1000; 
    StringBuilder largeTagValue = new StringBuilder(); 
    largeTagValue.Capacity = tagLength + 2; 
    for (int i = 0; i < tagLength; i++) 
    { 
     largeTagValue.Append("A"); 
    } 
    largeTagValue.Append("\0"); 
    string largeTagValueString = largeTagValue.ToString(); 
    for (int i = 0; i < 10; i++) 
    { 
     presentation.Tags.Add("LARGE_TAG" + i.ToString(), largeTagValueString); 
    } 
} 

После запуска этого надстройку, я могу даже отключить его, чтобы убедиться, что он больше ничего не делает. Затем я несколько раз сохраняю презентацию и вижу, что использование памяти PowerPoint в списке процессов растет каждый раз, когда я сохраняю презентацию.

Полная исходный код и образец презентация доступна here

Кто-нибудь знает, если это PowerPoint ошибка или есть обходной путь для этого? ...

Или, может быть, есть еще один способ хранить относительно большой объем данных в презентации PowerPoint?

+0

Я бы предположить, что это ошибка; конечно, это не * разработан * для утечки памяти, сбоя и сжигания. У меня нет информации, но я уверен, что где-то я объяснил, как можно включить любой произвольный файл в файл PowerPoint, предполагая, что вы используете один из форматов XML (PPTX, PPTM, PPSX и т. Д.). –

+0

Стив, у вас есть идеи, как хранить двоичный файл в PPTX без использования тегов PowerPoint? –

ответ

0

Немного больше поиска превратили вверх ... посмотрим на ответ Тодда Main первым, чтобы получить общее представление о том, что нужно:

Is it possible to add some data to a Word document?

+0

Стив, спасибо за полезный ответ. Я думаю, я могу попытаться сохранить двоичные данные в пользовательской XML-части презентации PowerPoint. Однако этот подход все же может иметь некоторые недостатки. 1. Мне все равно придется кодировать мои двоичные данные на базу 64, и это увеличит размер файла презентации. 2. Интересно, будет ли загрузчик презентации PowerPoint работать корректно, если я помещу огромный XML-файл в презентацию (например, ~ 50 мегабайт). Мне нужна возможность хранить несколько файлов в презентации. Поэтому я попробую этот подход, чтобы посмотреть, работает ли это для меня. Еще раз спасибо. –

+0

Вы можете сделать несколько тестов относительно времени загрузки без необходимости писать весь код; вставьте объекты OLE (объекты Excel, объекты Word, объекты Photoshop и т. д.) в презентацию и сохраните их, затем откройте файл PPTX (ZIP) и посмотрите, как хранятся объекты OLE и как они влияют на время загрузки и т. д. –

+0

Спасибо, Стив. Это интересная идея, я попробую это. –

Смежные вопросы