J'ai un problème étrange dans mon formulaire d'application de Windows. Parfois, le temps de chargement d'une DLL est très long (la chose frustrante est que cela arrive de manière aléatoire, parfois il n'y a pas de problèmes) Encore une chose: Cela n'arrive que sous Windows 7 (jamais sous Windows XP).Preload non géré dll
Le chargement de la DLL se passe quand il est utilisé la première fois.
Est-ce que quelqu'un a quelques conseils que je pourrais faire.
Est-il possible de précharger la DLL ou de lui donner une priorité plus élevée, etc.? a-chargement dll changé dans Windows 7 (peut-être de nouveaux contrôles de sécurité avant le chargement)
Quelques spécifications:
- En utilisant .NET 4.0
- Le dll n'est pas le code managé (I placé la dll le dossier dans lequel les fichiers exécutables sont)
EDIT - Quelques informations supplémentaires:
J'utilise Bass.dll (http://www.un4seen.com/) et je l'appelle via l'API .NET. Le système a bien fonctionné. Maintenant, certains utilisateurs sont passés à Windows 7 et ce problème a commencé à se produire de manière aléatoire.
J'ai cassé le code à un plus petit projet (pour pouvoir trouver le problème). Sur un de mes ordinateurs j'ai pu voir que le retard se produit (parfois quelques secondes, parfois jusqu'à 30 secondes). J'ai aussi posé cette question sur le forum pour ce composant:
http://www.un4seen.com/forum/?topic=12378.0
Ils ont mentionné les points suivants:
« La seule chose que je pourrais penser peut-être le temps de chargement des assemblages (dlls) - comme ils sont chargés chaque fois que nécessaire (c'est-à-dire la première fois qu'une méthode appelle un assembly qui n'a pas encore été chargé). "
Une partie du code ci-dessous:
public Form1() {
InitializeComponent();
Un4seen.Bass.BassNet.Registration("[email protected]", "XXX");
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 5000);
}
private void button1_Click(object sender, EventArgs e) {
DialogResult result = openFileDialog1.ShowDialog();
if(result == System.Windows.Forms.DialogResult.OK){
label1.Text = DateTime.Now.ToString();
int stream = Bass.BASS_StreamCreateFile(openFileDialog1.FileName, 0L, 0L, BASSFlag.BASS_DEFAULT);
bool success = Bass.BASS_ChannelPlay(stream, false); // delay occurs here
label2.Text = DateTime.Now.ToString();
}
}
NOUVEAU EDIT
I utilisé Process Monitor (grâce @Ziplin) pour vérifier les opérations. Voici le retard:
19: 31: 11,4886069 TestSound.exe 5048 RegQueryValue HKCU \ Software \ Microsoft \ Multimédia \ Audio \ UserDuckingPreference NOM INTROUVABLE Longueur: 144
19: 31: 11,4886281 TestSound.exe 5048 RegCloseKey HKCU \ Software \ Microsoft \ Multimedia \ Audio SUCCES
19: 31: 49,0892107 TestSound.exe 5048 Discussion sortie SUCCES Discussion ID: 5108, User Time: 0,0000000, Temps noyau: 0,0000000
19: 31: 54,1185784 TestSound.exe 5048 RegQueryKey HKCU \ Software \ Classes SUCCESS Requête: Nom
vous devriez probablement essayer de comprendre pourquoi il faut si longtemps pour charger –
Les problèmes qui se produisent de manière aléatoire sont difficiles à diagnostiquer. Mais il est encore plus difficile de diagnostiquer des problèmes lorsque nous ne recevons ni code source, ni une explication de ce que fait le code dans votre DLL *. Ne le piratez pas en préchargeant la DLL; résoudre le problème réel. Il n'y a aucun autre rapport de Windows 7 brisant le code valide. –
Merci, je vais modifier le poste avec plus d'informations. – PKK