Это могло увеличить размер исполняемого файла, и я не думаю, что компиляторы будут всегда на самом деле заставлять их встроить даже при том, что Вы использовали встроенное ключевое слово. (Или действительно ли это наоборот, как какой сказанный Vaibhav?...)
я думаю, что обычно хорошо, если функция имеет только 1 или 2 оператора.
Редактирование: Вот то, что документ linux CodingStyle говорит об этом:
Глава 15: встроенная болезнь
Там, кажется, общее неправильное восприятие, что gcc имеет волшебство, "делают меня быстрее" опцией ускорения названный "встроенным". В то время как использование встраивает, может быть соответствующим (например, как средство замены макросов, см. Главу 12), это очень часто не. Богатое использование встроенного ключевого слова приводит к намного большему ядру, которое в свою очередь замедляет систему в целом вниз, из-за большего icache места для ЦП и просто потому что существует меньше памяти, доступной для pagecache. Просто думайте об этом; мисс pagecache вызывает поиск на диске, который легко берет 5 миллисекунд. Существует МНОГО циклов CPU, которые могут войти в эти 5 миллисекунд.
А разумное эмпирическое правило не должно помещать встроенный в функции, которые имеют больше чем 3 строки кода в них. Исключением к этому правилу являются случаи, где параметр, как известно, является постоянным временем компиляции, и в результате этой постоянности Вы знаете , компилятор будет в состоянии оптимизировать большую часть Вашей функции далеко во время компиляции. Для хорошего примера этого более позднего случая посмотрите kmalloc () подставляемая функция.
Часто люди утверждают, что добавление встраивает к функциям, которые статичны и используются, только однажды всегда победа, так как нет никакого компромисса пространства. В то время как это технически корректно, gcc способен к встраиванию их автоматически без справки и проблемы обслуживания удаления встроенного, когда второй пользователь появляется, перевешивает потенциальную ценность подсказки, которая говорит gcc делать что-то, что это сделало бы так или иначе.
У нас была аналогичная проблема в проекте DirectX. Увеличение и уменьшение масштаба работают до определенной степени, но это имитирует это. Если это что-то, что вам нужно делать снова и снова, вы могли бы, возможно, проанализировать записи WMF и нарисовать их с помощью антиалиасинга GDI +.
Следующие потоки подтверждают это (но они из 2005 года, поэтому все могло измениться):
http://www.dotnet247.com/247reference/msgs/28/144605.aspx
[Edit:]
Эти три программы могут сделать работу за вас: Я предполагаю, что вы можете делать это вручную:
http: // emf-to -vector-converter-command-line-ser.smartcode.com/info.html
http://www.verypdf.com/pdf-editor/index.html
http://www.ivanview.com /converter/emf-batch-converter.html[1131030 visible
[Edit II:]
Итак, вот программа, которая позволит вам проверять EMF различными способами:
http://download.cnet.com/windows/3055-2383_4-10558240.html? tag = pdl-redir
... а вот бесплатная библиотека, которая позволит вам проанализировать 122 команды EMF и вывести их в GDI +. Это, вероятно, должно помочь:
http://www.codeproject.com/KB/GDI-plus/emfexplorer.aspx?msg=2359423
... о, и обратите внимание также на комментарий № 3 к проекту кода страница. Похоже, кто-то раньше бился головой о стену. Надеюсь, это решит вашу проблему.
EMF использует команды GDI, а не GDI +, поэтому в нем нет понятия антиалиасинга. Я подозреваю, что когда вы просите GDI + отрендерить файл, он отправляет его в GDI и просто копирует получившееся растровое изображение.
Дублирование этого в коде было бы тем же самым, что и повторная реализация GDI, так что это не совсем осуществимо. Не невозможно, просто большая работа, чем оправдывает выгода. Если есть утилита с открытым исходным кодом, которая может открывать файлы EMF вне Windows,