Open paulparas opened 6 years ago
Can you pass some example?
The ideal of using the datareader
. Mostly for large masses of data. It is always to pass the position of the column and not the description.
*see test ParameterTest()
I've 3000 rows , each row has 16 columns, it is taking too much time to read. Due to this second cursor is null. I want to set attribute OCI_ATTR_PREFETCH_ROWS. Default value is 1 but i want to read more rows at once to reduce round trips. OCI_ATTR_PREFETCH_ROWS can be set by calling OCIAttrSet() as mentioned here : https://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci04sql.htm#i429698
Please see section : Setting Prefetch Count in above article
But when I try to set this count I get memory access errors in C#. Can you help here please?
Tenho 3000 linhas, cada linha tem 16 colunas, está demorando muito tempo para ler. Devido a este segundo cursor é nulo. Eu quero definir o atributo OCI_ATTR_PREFETCH_ROWS. O valor padrão é 1, mas eu quero ler mais linhas de uma só vez para reduzir as viagens de ida e volta. OCI_ATTR_PREFETCH_ROWS pode ser configurado chamando OCIAttrSet () como mencionado aqui: [https://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci04sql.htm#i429698](https://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci04sql. htm # i429698)
Consulte a seção: Configuração Prefetch Contar no artigo acima
Mas quando tento configurar essa conta, recebo erros de acesso à memória em C #. Você pode ajudar aqui, por favor?
very well 👍 I'll take a look this weekend.
Hi We managed to get second cursor when we modified the function NextResult() in OracleDataReader.cs. We made hasRows = true if statement is not null in next cursor. Without this hasRows becomes false after 1st cursor and 2nd cursor is always null.
public
override
bool NextResult ()
{
ValidateState ();
if (statement == null)
return false;
statement.Dispose ();
statement = null;
statement = command.GetNextResult ();
if (statement == null)
return false;
else
hasRows = true;
return true;
}
But still we can't set Prefetch Size to improve performance.
Isso vai ser mais difícil do que eu imaginei. Andei pesquisando sobre o assunto e consigo encontrar muitos exemplos em C++. Porem não consegui realizar nenhum debug em C++, e muito menos relacionar a solução para o emaranhado de códigos importado pelo Mono (rs).
Exemplo C++ http://www.sqlines.com/oracle/oci/array_fetch
Vou realizar testes com a solução citada... Obrigado por contribuir para a comunidade ;-)
*Desculpe pelo português. Mas o meu inglês é ainda pior :D
paulparas, acredito que sua sugestão não cause muito efeito para fetch de linhas de um cursor. Pois o método NextResult ele é usado para recuperar vários cursores em uma mesma requisição. Que para o mundo Oracle, isso seria possível somente para procedures ou packages
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-data-using-a-datareader https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-data-from-multiple-ref-cursors
Hello @ericmend ,
I am also facing the issue of performance. I have two application, one on .Net framework where I am using ODP managed library and other application is on .Net Core 2 where I am using your package. When I measured the performance on both, I found that data retrieval in .Net Core 2 is 3 times slower.
Oi Eric Obrigado pela sua resposta e pesquisa sobre esta questão. Na ausência do Oracle Managed Client, esta biblioteca é um salvador de vida para a comunidade .net core.
Nós também vimos a maioria dos exemplos na internet estão em C ou C ++ talvez porque é fácil usar ponteiros em C ++. Nós quase tentamos tudo, desde configurar nrows, ociattrset, etc., mas é difícil de jogar com ponteiros em C # e obtemos erros de acesso à memória.
Em segundo lugar, nós testamos o NextResult () não funciona nesta biblioteca, ele retorna apenas o primeiro cursor quando há vários cursores. Então, como solução alternativa, modificamos NextResult ().
I'm using this library to connect to .net core but it is very slow in reading large data sets. I can't seem to set fetch size in this. How can we improve the fetch performance or increase fetch size?
Estou usando esta biblioteca para conectar-se ao núcleo .net, mas é muito lento na leitura de grandes conjuntos de dados. Não consigo definir o tamanho de busca neste. Como podemos melhorar o desempenho de busca ou aumentar o tamanho de busca?