2011-12-19 3 views
1

У меня есть приложение, использующее драйвер ODBC. Это более-менее построено, следуя этому небольшому учебнику http://edn.embarcadero.com/article/25639.Приложение Delphi и драйвер ODBC - лучшие практики. Загрузите большой объем данных и убейте приложение

Мой вопрос: предположим, что я прошу из базы данных принести в приложение почти 100 тыс. Записей по запросу. Но, прежде чем я получу результаты, приложение будет закрыто (дизайн программного обеспечения, который не сделан мной). Что происходит с драйвером ODBC? Он замерзнет? Будет ли увеличена память, используемая драйвером? Как я могу управлять этой «потенциальной» проблемой, если она существует?

+0

Я просто не понимаю .. + 1, -1, -1..no ответы, нет заданной причины для -1 ... странной политики для downvoting на SO! – RBA

+0

Вы получаете -1 голосов, потому что ваш вопрос очень расплывчатый. Не совсем понятно, о чем вы спрашиваете; на самом деле, даже не ясно, что вы пытаетесь сделать или какую проблему вы пытаетесь решить. Возможно, вы захотите отредактировать, чтобы улучшить описание того, что не работает правильно и что именно вы спрашиваете. Кроме того, размещение ссылок на код на внешних сайтах (даже если они являются EDN) не полезно, потому что люди не хотят идти куда-то еще, чтобы попытаться выяснить, в чем проблема. Вы также можете подумать об этом, пока редактируете. :) –

+0

Скорее всего, вы должны прочитать технические детали вашего конкретного драйвера ODBC. Ответ будет конкретным. –

ответ

2

Я не понимаю, была ли проблема, о которой вы просили, - это тот, который вы испытали (замораживание, увеличение памяти) или только один запрос, и в любом случае ответ, вероятно, зависит от драйвера ODBC и базы данных. Если вы получаете половину пути извлечения большого набора результатов и просто вызываете SQLFreeStmt (SQL_CLOSE), что будет дальше, это будет зависеть от драйвера ODBC и базы данных. Некоторые драйверы ODBC разговаривают с базой данных, используя синхронный протокол, и драйвер ODBC может быть недоступен, чтобы сообщить базе данных, что ему больше не нужны никакие строки - они просто отправляются и, поскольку драйвер ODBC не знает, что вы Следуя дальше, он должен будет прочитать все эти данные, но выбросить их (что можно рассматривать как паузу, особенно когда набор результатов является большим). Некоторые могут отправлять какой-то сигнал в базу данных, говоря о прекращении отправки строк.

В любом случае, в конце, поскольку приложение закрыто, использование памяти не существует ни здесь, ни там. Хорошая практика - попробовать и прибраться, когда ваше приложение будет закрыто, но это не имеет большого значения, если драйвер не создает некоторые системные ресурсы, которые не очищаются должным образом.

+0

Я не испытал ничего подобного. Просто хотел знать, что происходит, если я убиваю приложение до того, как данные «переместились» в пространство памяти приложения. – RBA

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