-
-
Notifications
You must be signed in to change notification settings - Fork 11
нативный сериализатор #106
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -318,10 +318,12 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецПроцедуры | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Процедура ЗаписатьОбъектВФайл(Значение, ИмяФайла, ОбъектМодели = Неопределено) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ТекстJSON = ПарсерJSON.ЗаписатьJSON(Значение); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, "UTF-8"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЗаписьТекста.Записать(ТекстJSON); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЗаписьТекста.Закрыть(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЗаписьJSON = Новый ЗаписьJSON; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЗаписатьJSON(ЗаписьJSON, Значение); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЗаписьJSON.Закрыть(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецПроцедуры | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция РазложитьОбъектВСоответствие(Значение, ОбъектМодели) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -335,9 +337,12 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецФункции | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция ПрочитатьОбъектИзФайла(ИмяФайла) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла, "UTF-8"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ТекстJSON = ЧтениеТекста.Прочитать(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Объект = ПарсерJSON.ПрочитатьJSON(ТекстJSON); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЧтениеТекста.Закрыть(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЧтениеJSON = Новый ЧтениеJSON(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Объект = ПрочитатьJSON(ЧтениеJSON, Истина); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ЧтениеJSON.Закрыть(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Возврат Объект; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецФункции | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
339
to
348
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Добавьте обработку исключений для корректного освобождения ресурсов. Аналогично методу записи, новая реализация с потоковым чтением JSON улучшает производительность, но требует корректной обработки исключений для освобождения ресурсов. Рекомендую добавить блок Функция ПрочитатьОбъектИзФайла(ИмяФайла)
ЧтениеJSON = Новый ЧтениеJSON();
- ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8");
- Объект = ПрочитатьJSON(ЧтениеJSON, Истина);
- ЧтениеJSON.Закрыть();
+ Попытка
+ ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8");
+ Объект = ПрочитатьJSON(ЧтениеJSON, Истина);
+ Исключение
+ ЧтениеJSON.Закрыть();
+ ВызватьИсключение;
+ КонецПопытки;
+ ЧтениеJSON.Закрыть();
Возврат Объект;
КонецФункции📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Добавьте обработку исключений для корректного освобождения ресурсов.
Новая реализация с потоковой записью JSON является хорошим улучшением производительности. Однако, если возникнет исключение во время записи, объект
ЗаписьJSONможет не быть закрыт корректно, что приведет к блокировке файла.Рекомендую добавить блок
Попытка...Исключение:📝 Committable suggestion
🤖 Prompt for AI Agents
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@coderabbitai Откуда ты знаешь, что это улучшает производительность?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nixel2007 Вы правы, я сделал необоснованное утверждение о производительности. Я не могу знать наверняка, что новая реализация быстрее без проведения бенчмарков.
Глядя на изменения более внимательно, старый подход через
ПарсерJSON.ЗаписатьJSON()сначала создает строку, а затем записывает её в файл, в то время как новый подход используетЗаписьJSONдля прямой записи в файл. Теоретически это может быть эффективнее (избегает создания промежуточной строки в памяти), но на практике это зависит от конкретной реализации этих классов в платформе.Судя по названию PR "нативный сериализатор", основная цель изменения - использование встроенных возможностей платформы вместо внешней библиотеки, а не обязательно улучшение производительности.
Мою рекомендацию по обработке исключений всё же стоит рассмотреть - независимо от производительности, важно корректно освобождать ресурсы файла.