我们有用VB .NET 4.0/VS2010编写的.NET应用程序,编译时所有项目都设置为AnyCPU设置,用于Debug和Release配置.我们注意到,当这个应用程序在64位环境(在Windows Server 2003 R2和2008 R2上测试)上运行时,应用程序至少需要两倍的时间(绝对值约为25秒),而不是大约6-12在32位环境(Win XP和7)上启动秒.
我应该补充一点,64位系统是功能强大的服务器,绝对比其他测试的32位系统更强大.所有其他应用程序在64位上更快,但不是我们糟糕的应用程序;)(我们确实在不同的时间,在不同的负载下测试应用程序,结果总是几乎相同.)
如上所述,应用程序是使用AnyCPU构建的,它在64位操作系统下运行为64位程序集(通过TaskManager检查).该应用程序本身是一个WinForms应用程序,使用NetAdvantage Forms v10.3并定期查询和写入MS SQL Server 2008.
不同的目标机器都在同一个网络上,因此数据库的路径(相同的数据库用于性能测试)例如是相同的,我认为问题不在于数据库或网络本身.
我注意到的一件事,对我来说似乎很奇怪,当我在MainForm启动期间使用秒表构建不同的"分析步骤"时,InitializeComponent方法在64位上花了两倍长,大约4秒反对1.5在32位.
这是我们在两个系统上部署的相同应用程序,没有不同的配置.
所以我有两个问题:
知道这可能是什么原因吗?
并且:确定"违规"代码段的最佳方法是什么?目前我使用秒表并试图缩小范围.但在我看来,就我们的应用而言,64位机器上的一切都比较慢,所以我不太确定我可以将其分解为具体的陈述.
谢谢大家的帮助,非常感谢...
我们有一个.NET应用程序(VB/VS2010),并在SQL Server 2008上调用许多存储过程以进行数据库查询.我们还有一些更新/插入/删除触发器,一旦这些存储过程修改数据库表就会自动执行.
通常情况下,调用存储过程并且它似乎执行正常,因为没有引发错误并且.NET应用程序像往常一样继续.但是,如果我查看封面并通过SQL Server客户端手动执行存储过程调用,我会看到在存储过程失败后立即执行的触发器,从而回滚所有更改.
所以我的问题是:在.NET应用程序中检测并传递错误的最佳方法是什么 - >存储过程 - >触发器方案,以确保在.NET应用程序中确保一切都成功或不出错?
非常感谢,史蒂夫
更新:我现在在家,离开我的办公桌(和代码库)周末,所以没有机会检查存储过程的细节.非常感谢到目前为止给出的答案.我可以在下周再看一下代码.
但在此期间......
一个问题是关于MS SQL Server的版本:它是2008年.
据我所知,我们以这种方式调用存储过程(至少那些不读取数据并"只是"更新,删除或插入数据的存储过程):
Using connection As New SqlConnection("connectionString")
Dim command As New SqlCommand("EXEC STORED_PROCEDUR_ENAME), connection)
command.Connection.Open()
command.ExecuteNonQuery()
End Using
Run Code Online (Sandbox Code Playgroud)
我认为上面代码背后的假设是期望如果某些内容在存储过程或相关触发器中失败,那么
command.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)
然后会失败.这可能是我的第一个问题,即我必须改变这段代码吗?下面的一个问题是如果我使用ExecuteDataReader,那么答案是否定的,至少目前为止......
我将在下面评论SQL特定的问题和建议.
我不确定我可以在哪里使用
SET DEADLOCK_PRIORITY...
Run Code Online (Sandbox Code Playgroud)
我的存储过程中的命令.在开始交易之前是否需要?或者它可以在交易的任何地方?
谢谢大家!
有没有办法将生成的构建路径替换为pdb-Files?
因此,例如,在第123行的"f:\ xy\build-dir\foo.vb中的异常"形式的错误被赋予" 在第123行的其他内容\foo.vb中的异常"
我开始开发以下场景(Visual Studio 2010,WCF):我们网络中的不同客户端将调用我自己开发的Web服务,该服务作为Windows服务的一部分托管,因此我们讨论的是自托管WCF Windows服务中的Web服务.
自托管的WCF Web服务将依次调用外部Web服务,因此就像一种外观.
显然,我的自托管WCF Web服务需要接受并发调用,这就是我的问题:我计划的是在我自己托管的WCF Web服务上从不同客户端调用的操作中,我只想创建客户端外部Web服务,调用外部Web服务,从外部Web服务获得同步响应,然后回复调用客户端.
听起来很简单,但是我需要考虑多个线程进入我的服务主机吗?显然我需要小心主机本身的任何"全局"变量,但如果我只是在被调用的Web服务的不同操作中创建外部Web服务客户端,或者我忽略了什么,我应该保存?
谢谢大家!
干杯,斯特沃
.net ×3
32bit-64bit ×1
64-bit ×1
concurrency ×1
deadlock ×1
debugging ×1
infragistics ×1
pdb-files ×1
performance ×1
self-hosting ×1
sql ×1
sql-server ×1
triggers ×1
wcf ×1
web-services ×1