Canvas does not allow drawing em relatório no WTS
Bom dia a todos.
Este erro(´Canvas does not allow drawing´) ocorre muitas vezes quando se está conectado via wts e vai tentar emitir um relatório.
A pesquisa ao banco é feita corretamente e ao executar o ´print´ do relatório(Report Builder) dá o erro e não tem santo que faça funcionar.
Aí tem que se desconectar e conectar novamente, sendo que as vezes não resolve.
Alguém sabe porquê da isso e como faz para corrigir?
Este erro(´Canvas does not allow drawing´) ocorre muitas vezes quando se está conectado via wts e vai tentar emitir um relatório.
A pesquisa ao banco é feita corretamente e ao executar o ´print´ do relatório(Report Builder) dá o erro e não tem santo que faça funcionar.
Aí tem que se desconectar e conectar novamente, sendo que as vezes não resolve.
Alguém sabe porquê da isso e como faz para corrigir?
Iibalena
Curtidas 0
Respostas
Afarias
23/09/2009
Este erro pode ser causado por uma série de coisas, dentre elas:
1) Falta de recursos do Windows (geralmente pq os recursos alocados não vem sendo liberados, em algum momento não há mais recursos disponíveis)
2) A aplicação tenta ´desenhar´ num contexto inválido como no construtor do componente ou quando uma operação anterior no canvas não foi concluída.
T+
1) Falta de recursos do Windows (geralmente pq os recursos alocados não vem sendo liberados, em algum momento não há mais recursos disponíveis)
2) A aplicação tenta ´desenhar´ num contexto inválido como no construtor do componente ou quando uma operação anterior no canvas não foi concluída.
T+
GOSTEI 0
Iibalena
23/09/2009
Este erro pode ser causado por uma série de coisas, dentre elas:
1) Falta de recursos do Windows (geralmente pq os recursos alocados não vem sendo liberados, em algum momento não há mais recursos disponíveis)
2) A aplicação tenta ´desenhar´ num contexto inválido como no construtor do componente ou quando uma operação anterior no canvas não foi concluída.
T+
1- Falta de recursos voce quer dizer hardware?
A pessoa conecta em uma maquina muito boa, então acho que não seria falta de hardware.
2- Como eu faria para saber se o contexto é inválido ou se a operação ainda não foi concluída?
E como que eu faço para concluir a mesma?
GOSTEI 0
Afarias
23/09/2009
|1- Falta de recursos voce quer dizer hardware?
|A pessoa conecta em uma maquina muito boa, então acho que não seria
|falta de hardware.
Recursos virtuais (do SO).
Verificou se há memory leaks? Tem liberado os recursos utilizados em seu programa? Quantos usuários simultâneos (no TS)?
|2- Como eu faria para saber se o contexto é inválido ou se a operação
|ainda não foi concluída? E como que eu faço para concluir a mesma?
Tem a ver com ´como está programado´.
T+
|A pessoa conecta em uma maquina muito boa, então acho que não seria
|falta de hardware.
Recursos virtuais (do SO).
Verificou se há memory leaks? Tem liberado os recursos utilizados em seu programa? Quantos usuários simultâneos (no TS)?
|2- Como eu faria para saber se o contexto é inválido ou se a operação
|ainda não foi concluída? E como que eu faço para concluir a mesma?
Tem a ver com ´como está programado´.
T+
GOSTEI 0
Iibalena
23/09/2009
|Recursos virtuais (do SO).
Hum, isso é com o adm do servidor da empresa
|Verificou se há memory leaks? Tem liberado os recursos utilizados em seu |programa? Quantos usuários simultâneos (no TS)?
Devem haver memory leaks sim, mas, por exemplo, alguns relatórios estão agrupados em um determinado form, esse form fica sempre criado, isso pode ocasionar um memory leak?
Os recursos estão liberados sim.
E é em torno de 40~50 usuários.
|Tem a ver com ´como está programado´.
O ´como está programando´ pode ser liberar telas, variáveis da memória, esse tipo de coisa?
Hum, isso é com o adm do servidor da empresa
|Verificou se há memory leaks? Tem liberado os recursos utilizados em seu |programa? Quantos usuários simultâneos (no TS)?
Devem haver memory leaks sim, mas, por exemplo, alguns relatórios estão agrupados em um determinado form, esse form fica sempre criado, isso pode ocasionar um memory leak?
Os recursos estão liberados sim.
E é em torno de 40~50 usuários.
|Tem a ver com ´como está programado´.
O ´como está programando´ pode ser liberar telas, variáveis da memória, esse tipo de coisa?
GOSTEI 0
Afarias
23/09/2009
|Hum, isso é com o adm do servidor da empresa
Na verdade tem mais a ver com como vc programa, uma vez q vc informou que o Hardware ´atende´
|por exemplo, alguns relatórios estão agrupados em um determinado
|form, esse form fica sempre criado, isso pode ocasionar um memory
|leak?
´Memory Leak´ é quando memória é alocada e nunca liberada. Isso reduz os recursos disponíveis podendo chegar a dar problemas por falta destes recursos
Mas seu problema começa quando vc enche um form de componentes de relatórios (q costumam consumir muito recurso) e este fica criado o tempo inteiro, ainda mais rodando num TS com 40-50 usuários (basta multiplicar) -- uma hora o hardware/recursos virtuais se esgotam!
Esse pequeno erro de abordagem não faz muita diferença com 1 usuário em 1 máquina, mas com 40-50 em 1 máquina a coisa fica feia.
Procure ter componentes de relatório separados 1 para cada Form (ou DM) e cría-los quando for exibir o relatório e destruí-los logo após o relatório ser fechado (não ser mais necessário).
Assim vc não fica consumindo recursos sem necessidade, otimizando o uso da máquina e evita ´memory leaks´ por garantir q o q foi criado é destruído.
T+
Na verdade tem mais a ver com como vc programa, uma vez q vc informou que o Hardware ´atende´
|por exemplo, alguns relatórios estão agrupados em um determinado
|form, esse form fica sempre criado, isso pode ocasionar um memory
|leak?
´Memory Leak´ é quando memória é alocada e nunca liberada. Isso reduz os recursos disponíveis podendo chegar a dar problemas por falta destes recursos
Mas seu problema começa quando vc enche um form de componentes de relatórios (q costumam consumir muito recurso) e este fica criado o tempo inteiro, ainda mais rodando num TS com 40-50 usuários (basta multiplicar) -- uma hora o hardware/recursos virtuais se esgotam!
Esse pequeno erro de abordagem não faz muita diferença com 1 usuário em 1 máquina, mas com 40-50 em 1 máquina a coisa fica feia.
Procure ter componentes de relatório separados 1 para cada Form (ou DM) e cría-los quando for exibir o relatório e destruí-los logo após o relatório ser fechado (não ser mais necessário).
Assim vc não fica consumindo recursos sem necessidade, otimizando o uso da máquina e evita ´memory leaks´ por garantir q o q foi criado é destruído.
T+
GOSTEI 0
Iibalena
23/09/2009
Ok, muito obrigado!
Vou verificar exatamente com o usuário em que relatórios que acontecem os erros, pois alguns estão centralizados e outros nos forms, isolá-los em forms separados e testar.
Isso resolveria tudo, correto?
Vou verificar exatamente com o usuário em que relatórios que acontecem os erros, pois alguns estão centralizados e outros nos forms, isolá-los em forms separados e testar.
Isso resolveria tudo, correto?
GOSTEI 0
Afarias
23/09/2009
|Isso resolveria tudo, correto?
Desde que vc não use ´Auto-Create Forms´... Ou seja... Não basta separar, os forms não devem ser criados quando começa a aplicação.
Devem ser criados quando necessário e destruídos assim q não são mais necessários. Sacou?
Boa sorte :D
T+
Desde que vc não use ´Auto-Create Forms´... Ou seja... Não basta separar, os forms não devem ser criados quando começa a aplicação.
Devem ser criados quando necessário e destruídos assim q não são mais necessários. Sacou?
Boa sorte :D
T+
GOSTEI 0
Iibalena
23/09/2009
Claro claro, entendo.
Mas alguns é inevitável que fiquem no auto-create, mas outros nem tanto!
Muito obrigado pelo auxílio.
:)
Mas alguns é inevitável que fiquem no auto-create, mas outros nem tanto!
Muito obrigado pelo auxílio.
:)
GOSTEI 0