VB.NET 会丢弃 Access 数据库吗?
Posted
技术标签:
【中文标题】VB.NET 会丢弃 Access 数据库吗?【英文标题】:Does VB.NET trash Access databases? 【发布时间】:2008-11-11 17:18:10 【问题描述】:在这里抓住救命稻草...我使用 VB6 桌面系统使用多个 2003 样式的 Access 数据库 (.MDB)。最近,我将第一个函数从 VB6 更改为 VB.NET,仍然使用 Access 数据库。这不仅仅是转换,而是具有附加功能的重写。它仍然是相当简单的功能,具有低容量数据库。我们有 1400 名客户,都是机器质量各异的小型企业。大多数客户都对新屏幕和功能感到满意。这些客户中的极少数经历了加载 datagridview 的极度缓慢的情况。客户服务告诉我们 1) 机器至少有 1 GB 的 RAM,并且 2) 重新启动总能解决问题。
我编写了一个应用程序来严重降低我的机器速度,但它对我来说仍然比为少数客户运行得更好。此外,我的 Access 数据库从未被此应用程序破坏。
有什么建议吗?
谢谢!!
【问题讨论】:
听起来您的应用程序中存在内存泄漏。多个用户是否访问同一个访问数据库? 这两家商店都有多台机器。 2 到 4 之间的多重手段。他们将有能力击中同一个数据库,但不太可能经常这样做。感谢您的帮助! 【参考方案1】:在更新访问数据库时重新启动可能会破坏它。
您需要更多信息,以便更好地了解正在发生的事情。他们需要在出现问题的工作站上为您收集一些信息。使用任务管理器,您可以让他们获得以下信息:
CPU 利用率 什么任务消耗 cpu 最多 XP 上的峰值(已提交)内存 - Vista 上没有相应的 XP 上的总(已提交)内存 - Vista 上无等值 XP 上的可用(物理)内存 - Vista 上免费(被 Superfetch 弄得一文不值)还可以在 XP 和 Vista 上使用命令行工具“SYSTEMINFO”来获取总内存和可用内存。如果您的可用资源非常少,并且在 XP 上,如果您的总提交量大于您的总物理量,那么您很可能是交换并且内存不足(或内存泄漏)导致您的速度变慢。
底线是您需要更多信息。可能是工作站上的另一个应用程序导致了问题。我们遇到过 Notes 5.0 出现问题,如果大部分窗口被另一个窗口覆盖,并且您收到一条新邮件消息,Notes 上的 cpu 利用率会达到 100%。这导致应用程序运行缓慢,除非您在工作站上查看任务监视器,否则您永远不会猜到是 Notes 导致了问题。问题总是在不同的程序(前台程序)中调用。 Access 也可以在不同的模式下使用 100% cpu,即使它看起来没有做任何事情。
尽可能多地收集信息。您可能想编写一个 vbscript 或程序来为您收集一些信息,以便遇到问题的人可以在重新启动之前运行它来收集信息。
执行以下操作的批处理文件将为您提供相当多的信息:
@echo off
SystemInfo >c:\systeminfo.log
tasklist /v >>c:\systeminfo.log
【讨论】:
很好的提示集合 - 谢谢!我会看看他们已经收集了哪些类型的信息,并从您的建议开始了解更多信息。【参考方案2】:我们也有类似的经历,大多数情况是杀毒软件引起的。他们经常检查文件(每次访问文件时都会有一些反病毒)。
【讨论】:
如果您使用基于文件扩展名的扫描,则应为 MDB 关闭 AV。只有一个实际的野外 Access 病毒实例,如果您只有一个 MDB 后端,那么无论如何都不会从该 MDB 运行任何代码(因为用户没有打开它访问)。【参考方案3】:不,VB.Net 与 Access 配合得很好。 SHARED 环境将丢弃访问权限。
由于重启解决了问题,我会检查您是否正确关闭了连接。
【讨论】:
我不这么认为。 LAN 上通常需要为 1-10 个用户使用一个访问数据库。如果用户不经常使用它,一切正常。但这种行为不是“默认”的。需要一些调整经验。但是所有信息都可以在互联网上找到。 称职的程序员使用 Jet 数据库作为数据存储编写多用户应用程序没有困难。【参考方案4】:对我来说,这听起来像是一个很大的内存泄漏。
一些客户会让您的应用程序运行的时间比其他客户更长,并且受到的打击更大。
在有多个并发用户的情况下使用 Access 不可避免地会导致痛苦。
【讨论】:
当您对 Jet 数据库引擎不称职的应用程序编程时,对多个用户使用 Access 有时会导致痛苦。但问题在于无能,而不是 Access/Jet。 VB.NET (& VB6) 不会泄漏内存。 (不过,您可以“泄露”数据库连接)。以上是关于VB.NET 会丢弃 Access 数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章