簡體   English   中英

在C#.net應用程序中創建窗口句柄時出現錯誤

[英]Getting Error creating window handle in C#.net application

項目簡介:

我是一個相對初級的程序員。 我的應用程序是使用VS2008C#.net編寫的,並且針對.net 3.5。這是一個相當大的程序(按照我的標准),大約有200種形式+ 30類和5萬行代碼。 該程序的其中一部分從一個文本文件導入數據,計算一堆東西,然后將結果寫入Access數據庫。

導入過程通常可以運行20分鍾或更長時間,具體取決於文本文件中的行數。 最終,程序崩潰,並且出現“錯誤:創建窗口句柄錯誤-始終在代碼的不同位置。運行時,它似乎也持續變慢。(可能是分頁問題?)我的操作系統是帶有SP3的XP ,32位3Gig RAM如果問題很重要,那么在我的W7 64位計算機上也存在4Gig RAM的問題。

我已閱讀了該錯誤,並已與任務管理器進行了一些偵查工作,並且顯然我遇到了內存泄漏。 這是我收集的一些數據。

startup - memory usage = 48M / Handles = 428 / Threads = 17 / User Objects = 111

1 minute memory usage  = 65M / Handles = 520 / Threads = 22 / User Objects = 523

2 minutes memory usage = 81M / Handles = 520 / Threads = 19 / User Objects = 952

3 minutes memory sage = 98M / Handles = 510 / Threads = 19 / User Objects = 1359

4 minutes memory usage = 113M / Handles = 510 / Threads = 18 / User Objects = 1766

這一直持續到程序崩潰為止。

從網上尋找答案。 我期望看到引起問題的句柄數量在增加。 看來問題在於用戶對象的數量正在耗盡我的內存,也許最終導致崩潰? 當崩潰發生時,內存使用量通常在450M至600M之間。

我嘗試在數據處理過程中多次調用的一個類中添加一些.Dispose()代碼,但這沒有任何效果。 (也許是因為我做得不好...)

  1. 越來越多的對象/內存使用量是否引起了問題?
  2. 我如何找出正在增長的用戶對象(類或表單?)?
  3. 找到它后,該如何解決?

任何建議都將受到歡迎。

如果使用主子窗體形式(或mdi窗體)結構並注冊到主窗體事件,則可能導致關閉的子窗口永久存在。

您還可以使用內存探查器查看過度創建了哪些對象。

我建議使用內存分析器,例如ANTS Memory Profiler。 我已經成功地使用它來精確地跟蹤正在增長的對象。

他們有一個免費試用和演練開始。 他們也有一些不錯的技術論文 ,它們可以更好地理解.NET內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM