[ASP.Net] Question de performance ?

Question de performance ? [ASP.Net] - C#/.NET managed - Programmation

Marsh Posté le 20-05-2004 à 20:51:03    

Qu'est ce qui est le plus rapide à être éxécuter ?
Ça :

Code :
  1. Public Class MaClasse()
  2.       Public Variable1 as String = ChaineDeCaractere1
  3.       Public Variable2 as String = ChaineDeCaractere2
  4.       Public Variable3 as String = ChaineDeCaractere3
  5.       Public Variable4 as String = ChaineDeCaractere4
  6.       ...
  7.       Public Variablen as String = ChaineDeCaracteren
  8. End Class
  9. Public Class MaClassePrincipale()
  10.       Public Sub New()
  11.          Dim obj as Object = New MaClasse()
  12.       End Sub
  13. End Class


 
ou ça :
 

Code :
  1. Public Class MaClasse()
  2.       Public Variable1 as String
  3.       Public Variable2 as String
  4.       Public Variable3 as String
  5.       Public Variable4 as String
  6.       ...
  7.       Public Variablen as String
  8.      
  9.       Public Sub New()
  10.          Variable1 = ChaineDeCaractere1
  11.          Variable2 = ChaineDeCaractere2
  12.          Variable3 = ChaineDeCaractere3
  13.          Variable4 = ChaineDeCaractere4
  14.          ...
  15.          Variablen = ChaineDeCaracteren
  16.       End Sub
  17. End Class
  18. Public Class MaClassePrincipale()
  19.       Public Sub New()
  20.          Dim obj as Object = New MaClasse()
  21.       End Sub
  22. End Class


Message édité par zetoune le 20-05-2004 à 20:52:06
Reply

Marsh Posté le 20-05-2004 à 20:51:03   

Reply

Marsh Posté le 20-05-2004 à 20:55:11    

1° C'est quoi ces propriétés de class en public?!
2° Si le compilo est intelligent, ca revient exactement au même.

Reply

Marsh Posté le 20-05-2004 à 21:02:05    

En fait, la premiere classe est un dictionnaire.
Ce qui me permet dans une seule page de gérer la langue.
(En fait j'ai plusieurs classes MaClasse , genre MaClass_fr,Maclass_En,MaClass_Sp).
 
Donc pour un n'importe quel mot. Je peux appeler dans MaClassPrincipale la variable Obj.Variablex pour avoir la valeur dans la langue que je veux (En créant un objet de la classe MaClass_(Languequeveux) ou Languequejeveux est un parametre en Querystring.
 
 
 
 

Reply

Marsh Posté le 20-05-2004 à 23:05:36    

mouais, c'est assez crade comme technique.

Reply

Marsh Posté le 21-05-2004 à 13:54:12    

Du coté du code généré, tes deux exemples génèrent exactement la même chose. Dans le premier cas, tu initialises en "inline" et dans le deuxieme cas tu initialise dans le constructeur.
 
Dans tous les cas, ton code n'est absolument pas adapté et inutile. Pour ton problème, je ne peux que te conseiller d'utiliser le système des resources intégré dans .NET qui est capable d'effectuer exactement ce que tu recherches et qui plus est sans ton intervention.
 
Regardes du coté de System.Resources et System.Resources.ResourceManager et les fichiers de ressources localisés.
 
--
Jay
{Epitech.}
http://msdn.labtech.epitech.net/blogs
 

Reply

Marsh Posté le 21-05-2004 à 15:09:25    

gizmo : j ai aucun problème à améliorer ça !!! Des tuyaux ???
 
jaylee : ouais ok..

Reply

Marsh Posté le 21-05-2004 à 15:10:45    

bah la solution de Jaylee dans un premier temps, et ensuite, quand tu créeras d'autres objets, évite de mettre les propriétés en public, sauf en dernier recours.

Reply

Marsh Posté le 21-05-2004 à 15:14:40    

Mais pour y avoir accès à l'extérieur de la classe j'ai pas le choix que cela soit public !

Reply

Marsh Posté le 21-05-2004 à 15:21:48    

houla! c'est la première fois que tu fais de la programmation objet, pas vrai? Regarde du côté des getters et setters...

Reply

Marsh Posté le 21-05-2004 à 15:30:31    

Gizmo, ce que Setoune a déclaré en public sont des champs et non des propriétés.
 
Zetoune, dans la programmation objet on effectue ce que l'on appelle de l'encapsulation des données et en C# cela s'effectue par l'intermédiaire des propriétés (Properties). Autrement dit, tu vas faire quelque chose du style :
 

Code :
  1. Public Class SomeClass
  2.     Private myValue As String
  3.     Public Property MyValue() As String
  4.         Get
  5.             Return myValue
  6.         End Get
  7.         Set (ByVal Value As String)
  8.             myValue = value
  9.         End Set
  10.     End Property
  11. End Class


 
L'utilisation des propriétés permet, par exemple, d'éviter que l'utilisateur de ta classe ne fasse quelque que tu n'as pas prévu en mettant une valeur incorrecte dans ton champ privé.
 
Autre chose, je ne saurais trop te conseiller de faire du C# et non du VB.NET... la syntaxe est généralement beaucoup moins chargée :
 

Code :
  1. public class SomeClass
  2. {
  3.     private string _myValue = string.Empty;
  4.     public string MyValue {
  5.         get {
  6.             return _myValue;
  7.         }
  8.         set {
  9.             _myValue = value;
  10.         }
  11.     }
  12. }


 
Qui donne le même résultat...
 
--
Jay
{Epitech.}
http://msdn.labtech.epitech.net/blogs

Reply

Marsh Posté le 21-05-2004 à 15:30:31   

Reply

Marsh Posté le 21-05-2004 à 15:34:38    

jaylee a écrit :

Gizmo, ce que Setoune a déclaré en public sont des champs et non des propriétés.


 :heink: En programation objet, on n'a pas de champs dans une classe, on a des méthodes et des propriétés, point.

Reply

Marsh Posté le 21-05-2004 à 15:36:45    

Ouais je connais les propriétés tout de même.
Jaylee. Je vais regarder du côté des Resources.  
Peux tu me dire un peu le fonctionnement ? Ca charges les variables dans mémoire. Je peux les récupérer à n'importe quel endroit ?

Reply

Marsh Posté le 21-05-2004 à 15:42:37    

Gizmo, je te conseille donc de regarder la documentation du framework. .NET étend légèrement le sens des termes utilisés généralement en O.O.P.
 
Dans un type, il est possible de trouver les éléments suivants :  
 

  • Events
  • Methods
  • Properties
  • Fields
  • Plus d'autres éléments inutiles pour ce post...


En .NET, il existe une différence de taille entre Champ et Propriété, l'un étant une variable au sens original du terme, l'autre étant la simplification de l'utilisation des accesseurs.
 
--
Jay
{Epitech.}
http://msdn.labtech.epitech.net/blogs

Reply

Marsh Posté le 21-05-2004 à 15:47:58    

jaylee : pour en revenir au début de ma question. Je veux gagner en rapidité d'affichage de ma page. J'en conclus donc que mon affaire est une usine à gaz. Avec ce que tu m'as conseillé ca devrait aller plus vite ?

Reply

Marsh Posté le 21-05-2004 à 15:59:04    

zetoune a écrit :

jaylee : pour en revenir au début de ma question. Je veux gagner en rapidité d'affichage de ma page. J'en conclus donc que mon affaire est une usine à gaz. Avec ce que tu m'as conseillé ca devrait aller plus vite ?


 
Ca ira plus vite pour toi à l'utilisation et ce sera beaucoup plus propre (donc plus rapide). Par exemple, tu pourras utiliser un ResourceManager de cette manière (Exemple tiré de la MSDN Library) :
 

Code :
  1. using System;
  2. using System.Globalization;
  3. using System.Threading;
  4. using System.Resources;
  5. using System.Reflection;
  6. class ResourcesExample
  7. {
  8.     public static void Main()
  9.     {
  10.        // Create a resource manager to retrieve resources.
  11.        ResourceManager rm = new ResourceManager("items",
  12.           Assembly.GetExecutingAssembly());
  13.        // Get the culture of the currently executing thread.
  14.        // The value of ci will determine the culture of
  15.        // the resources that the resource manager retrieves.
  16.        CultureInfo ci = Thread.CurrentThread.CurrentCulture;
  17.        
  18.        // Retrieve the value of the string resource named  
  19.        // "welcome", localized for the culture specified by ci.
  20.        String str = rm.GetString("welcome", ci);
  21.        Console.WriteLine(str);
  22.     }
  23. }


 
Il te suffit alors de créer des fichiers ressources nommés par exemple :

  • items.fr-FR.resx
  • items.en-US.resx
  • items.de.resx
  • items.resx


Le dernier étant considéré comme un "fallback" au cas où le langage demandé n'existerait pas.
 
--  
Jay  
{Epitech.}  
http://msdn.labtech.epitech.net/blogs

Reply

Marsh Posté le 21-05-2004 à 16:00:35    

Ca ira plus vite pour toi à l'utilisation et ce sera beaucoup plus propre (donc plus rapide). Par exemple, tu pourras utiliser un ResourceManager de cette manière (Exemple tiré de la MSDN Library, ms-help://MS.NETFrameworkSDKv1.1/cpref/html/frlrfsystemresourcesresourcemanagerclassctortopic.htm) :
 

Code :
  1. using System;
  2. using System.Globalization;
  3. using System.Threading;
  4. using System.Resources;
  5. using System.Reflection;
  6. class ResourcesExample
  7. {
  8.     public static void Main()
  9.     {
  10.        // Create a resource manager to retrieve resources.
  11.        ResourceManager rm = new ResourceManager("items",
  12.           Assembly.GetExecutingAssembly());
  13.        // Get the culture of the currently executing thread.
  14.        // The value of ci will determine the culture of
  15.        // the resources that the resource manager retrieves.
  16.        CultureInfo ci = Thread.CurrentThread.CurrentCulture;
  17.        
  18.        // Retrieve the value of the string resource named  
  19.        // "welcome", localized for the culture specified by ci.
  20.        String str = rm.GetString("welcome", ci);
  21.        Console.WriteLine(str);
  22.     }
  23. }


 
Il te suffit alors de créer des fichiers ressources nommés par exemple :

  • items.fr-FR.resx
  • items.en-US.resx
  • items.de.resx
  • items.resx


Le dernier étant considéré comme un "fallback" au cas où le langage demandé n'existerait pas.
 
--  
Jay  
{Epitech.}  
http://msdn.labtech.epitech.net/blogs


Message édité par jaylee le 21-05-2004 à 16:03:11
Reply

Marsh Posté le 21-05-2004 à 16:01:55    

Ok perfect.. Je vais regarder ça !!! Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed