OVH Cloud OVH Cloud

declaration et instanciation

2 réponses
Avatar
herve
Bonjour,

1°) Je déclarai mes instances au début de mes class afin d'en faire
bénéficier les fonctions, propriétés, ...

Private clsWebCommunsProgTraitFich As New
_WebCommuns.Prog.traitementFich

Public ReadOnly Property ucMenu1() As Boolean
End Property

Public ReadOnly Property ucMenu2() As Boolean
End Property

...

plutôt que les déclarés avec dim dans plusieurs fonctions, propriétés, ...

Public ReadOnly Property ucMenu1() As Boolean
dim clsWebCommunsProgTraitFich As New _WebCommuns.Prog.traitementFich
...
End Property

Public ReadOnly Property ucMenu2() As Boolean
dim clsWebCommunsProgTraitFich As New _WebCommuns.Prog.traitementFich
...
End Property

Hors en débuggant, je m'aperçois que je repasse dans le 1er cas à chaque
fois dans toutes les class de toutes mes pages aspx, ascx, ... sur cette
"initialisation" ce qui est assez pénible .
Mais le plus grave étant si celà pénalisait l'appli s'il y avait monté
en charge !!??


2°) De manière plus anectotique, je me pose la question si celà vaut le
coup d'optimiser et de gagner peut-etre en performance, en ne laissant
que les déclarations des objets dont on a besoin et enlevant à la
plupart WithEvents. Toutes ces choses rajouttées automatiquement par VS.NET

Protected ucSaisies As UserControl
Protected msgErrGen As HtmlGenericControl

Un avis, une idée
Hervé

2 réponses

Avatar
Patrice
Le New provoque effectivement une instanciation immédiate (contrairement par
exemple aux versions précédentes de VB). Cest donc normal d'autant plus que
le modèle de programmation ASP.NET fait que la page est recrée entièrement à
chaque sollicitation.

Tu peux aussi de te contenter de déclarer la variable privée au niveau de ta
classe mais l'instancier seulement en cas de besoin (supprimer le New, le
placer là ou tu ens as besoin).

Après je trouve plus propre si ce sont des variables purement locales de les
laisser locales. Si tu peux créer l'objet dans une fonction et réutiliser
cette même instance dans une autre, je le mettrai alors effectivement privé.

Pour la montée en charge. A voir ce qui est fait à la création. Il est clair
que si tu fais des traitements lourds, il est dommage de créer cet objet dès
le démarrage d'autant plus si certains chemins font que tu n'en as pas
besoin par la suite...



Patrice

--

"herve" a écrit dans le message de
news:%
Bonjour,

1°) Je déclarai mes instances au début de mes class afin d'en faire
bénéficier les fonctions, propriétés, ...

Private clsWebCommunsProgTraitFich As New
_WebCommuns.Prog.traitementFich

Public ReadOnly Property ucMenu1() As Boolean
End Property

Public ReadOnly Property ucMenu2() As Boolean
End Property

...

plutôt que les déclarés avec dim dans plusieurs fonctions, propriétés, ...

Public ReadOnly Property ucMenu1() As Boolean
dim clsWebCommunsProgTraitFich As New _WebCommuns.Prog.traitementFich
...
End Property

Public ReadOnly Property ucMenu2() As Boolean
dim clsWebCommunsProgTraitFich As New _WebCommuns.Prog.traitementFich
...
End Property

Hors en débuggant, je m'aperçois que je repasse dans le 1er cas à chaque
fois dans toutes les class de toutes mes pages aspx, ascx, ... sur cette
"initialisation" ce qui est assez pénible .
Mais le plus grave étant si celà pénalisait l'appli s'il y avait monté
en charge !!??


2°) De manière plus anectotique, je me pose la question si celà vaut le
coup d'optimiser et de gagner peut-etre en performance, en ne laissant
que les déclarations des objets dont on a besoin et enlevant à la
plupart WithEvents. Toutes ces choses rajouttées automatiquement par


VS.NET

Protected ucSaisies As UserControl
Protected msgErrGen As HtmlGenericControl

Un avis, une idée
Hervé


Avatar
Paul Bacelar
Les pages Web sont instantiées à chaque requête, l'illusion de continuité
est due au viewStates qui permet d'initialiser les contrôles et propriétés à
leur anciens valeurs.

L'optimisation n'a aucun sens sans une définition très précise de la
métrique de performance. En clair, optimiser n'a aucun sens mais rendre une
application plus performante dans un ou plusieurs cas d'utilisation sur un
ou plusieurs aspects est plus sensé.

Il est indéniable que WithEvents n'est pas gratuit, comme tous le reste.
Avant de perdre du temps sur des choses insignifiantes, il est préférable de
voir votre solution dans son ensemble et d'y détecter les goulot
d'étranglement et d'y remédier.

--
Paul Bacelar

"herve" wrote in message
news:#
Bonjour,

1°) Je déclarai mes instances au début de mes class afin d'en faire
bénéficier les fonctions, propriétés, ...

Private clsWebCommunsProgTraitFich As New
_WebCommuns.Prog.traitementFich

Public ReadOnly Property ucMenu1() As Boolean
End Property

Public ReadOnly Property ucMenu2() As Boolean
End Property

...

plutôt que les déclarés avec dim dans plusieurs fonctions, propriétés, ...

Public ReadOnly Property ucMenu1() As Boolean
dim clsWebCommunsProgTraitFich As New _WebCommuns.Prog.traitementFich
...
End Property

Public ReadOnly Property ucMenu2() As Boolean
dim clsWebCommunsProgTraitFich As New _WebCommuns.Prog.traitementFich
...
End Property

Hors en débuggant, je m'aperçois que je repasse dans le 1er cas à chaque
fois dans toutes les class de toutes mes pages aspx, ascx, ... sur cette
"initialisation" ce qui est assez pénible .
Mais le plus grave étant si celà pénalisait l'appli s'il y avait monté
en charge !!??


2°) De manière plus anectotique, je me pose la question si celà vaut le
coup d'optimiser et de gagner peut-etre en performance, en ne laissant
que les déclarations des objets dont on a besoin et enlevant à la
plupart WithEvents. Toutes ces choses rajouttées automatiquement par


VS.NET

Protected ucSaisies As UserControl
Protected msgErrGen As HtmlGenericControl

Un avis, une idée
Hervé