утечка памяти

synapse
Дата: 03.10.2005 09:18:00
Есть программа которая вставляет мнорго записей в цикле, при этом наблюдаю рост памяти самого сервера при котором утечка доходит до 750~800 мегов и все перестает работать...
Для каждой записи открывается и закрывается транзакция, может дело в этом?
Подскажите...
_______________________________________________________________
@Мы медленно запрягаем, быстро ездим, и сильно тормозим.@
srf2000
Дата: 03.10.2005 09:27:40
synapse
Есть программа которая вставляет мнорго записей в цикле, при этом наблюдаю рост памяти самого сервера при котором утечка доходит до 750~800 мегов и все перестает работать...
Для каждой записи открывается и закрывается транзакция, может дело в этом?
Подскажите...
_______________________________________________________________
@Мы медленно запрягаем, быстро ездим, и сильно тормозим.@


кашмар
вот это читали, пункт 1 ?
synapse
Дата: 03.10.2005 12:15:56
Сделал коммит на 100-500 инсертов, но не помогло все равно память растет и в конце концов вываливается на на функции isc_allocate_statement...
_______________________________________________________________
@Мы медленно запрягаем, быстро ездим, и сильно тормозим.@
VF
Дата: 03.10.2005 12:18:15
synapse
Сделал коммит на 100-500 инсертов, но не помогло все равно память растет и в конце концов вываливается на на функции isc_allocate_statement...
_______________________________________________________________
@Мы медленно запрягаем, быстро ездим, и сильно тормозим.@

сервер, компоненты доступа, кусок кода программы где вставка происходит.
надыть показать...
synapse
Дата: 03.10.2005 12:28:47
Сервер fb 1.5.2
Обращаюсь через native api написано все на вижуал с++.
Суть программы - парсю xml документ и вставляю все это в БД...
вот цикл:
		for(MSXML::IXMLDOMNodePtr pLine = pDocRoot->firstChild; pLine != NULL; pLine = pLine->nextSibling)
		{
			log_id = GetSingleInt("SELECT GEN_ID(L_LOG_GEN,1) FROM rdb$database;");
			mStatement.SetStatement((LPCTSTR)GetAttributes(pLine,log_id));
			mStatement.ExecuteImmediate();

	for(MSXML::IXMLDOMNodePtr pChild = pLine->firstChild; pChild != NULL; pChild = pChild->nextSibling)
	{
		list_id = GetSingleInt("SELECT GEN_ID(L_LIST_GEN,1) FROM rdb$database;");
		stmt.Format("INSERT INTO l_list(l_list_id,l_log_id,l_name,l_value) VALUES (%d ,%d , \'%s\', \'%s\');",
					list_id,log_id, GetNodeName(pChild),GetNodeText(pChild));
			
		mStatement.SetStatement((LPCTSTR)stmt);
		mStatement.ExecuteImmediate();	
	}
		}// end for
Я здесь бегу значение из генератора и вставляю связанные записи(один ко многим).
int CLogAnalyserDoc::GetSingleInt(CString statement)
{
	fbStatement st;
	st.SetDatabase(&mDatabase);
	st.SetTransaction(&mTransaction);
	st.SetStatement((LPCTSTR)statement);
	st.AllocXSQLDA(1);
	st.Allocate();
	st.Prepare();
	st.Describe();
	st.Execute();
	st.FetchRow();
	int ret = *(int*)st.GetValue(0);
	st.Free();

	return ret;
}
Все листинги класса приводить не буду Вы уточните где может крыться проблема и вставлю листинг...
Но в основном все оболочки типа Allocate() выглядят так:
	isc_dsql_allocate_statement(mStatus.GetStatus(), pDatabase->GetDBHandlePtr(), &mHandle);
	if (mStatus.IsError())
		{throw fbException("Statement::Allocate", "isc_allocate_statement failed!");}
_______________________________________________________________
@Мы медленно запрягаем, быстро ездим, и сильно тормозим.@
hvlad
Дата: 03.10.2005 12:47:49
Закрываешь стейтменты где (isc_dsql_free_statement) ?
synapse
Дата: 03.10.2005 12:58:30
hvlad
Закрываешь стейтменты где (isc_dsql_free_statement) ?

void fbStatement::Free(void)
{

	FreeXSQLVAR();
	
	// Free statement handle.
	isc_dsql_free_statement(mStatus.GetStatus(), &mHandle, DSQL_close);
	if (mStatus.IsError())
		{throw fbException("Statement::Free", "isc_dsql_free failed!");}
		
	FreeXSQLDA();
}
synapse
Дата: 03.10.2005 13:31:29
Нашел утечку нажно было в isc_dsql_free_statement вместо DSQL_close использовать DSQL_drop.
_______________________________________________________________
@Мы медленно запрягаем, быстро ездим, и сильно тормозим.@
Мимопроходящий
Дата: 03.10.2005 13:33:07

Привет, synapse!
Ты пишешь:

synapse
s> isc_dsql_free_statement(mStatus.GetStatus(), &mHandle, DSQL_close);

Помедитируй, на досуге, о разнице между DSQL_close и DSQL_drop.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3

Мимопроходящий
Дата: 03.10.2005 13:33:59

Привет, synapse!
Ты пишешь:

synapse
s> Нашел утечку нажно было в isc_dsql_free_statement вместо DSQL_close использовать DSQL_drop.

Ну вот. Не успел я.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3