我正在使用这段代码发送邮件:
SmtpClient client = new SmtpClient();
client.Host = smtpServer;
client.Send(mailMessage);
如果我每秒触发这个代码十次,那么在几百封邮件之后,发送一封邮件需要 10 秒......这里会不会涉及队列?
我正在使用这段代码发送邮件:
SmtpClient client = new SmtpClient();
client.Host = smtpServer;
client.Send(mailMessage);
如果我每秒触发这个代码十次,那么在几百封邮件之后,发送一封邮件需要 10 秒......这里会不会涉及队列?
我最近开始对 IIS 应用程序使用集成模式,而不是经典 .NET 模式。现在我有一个 system.web 标签和一个 system.webserver 标签。是否可以将所有内容从 system.web 移动到 system.webserver(我的意思不仅仅是复制,而是与 system.webserver 下的标签具有相同的功能)。
我有一个 RetrieveBlob.aspx,它获取一些查询字符串变量并返回一个资产。每个 url 对应一个独特的资产。
在 RetrieveBlob.aspx 中设置了缓存配置文件。在 Web.Config 中,配置文件看起来像(在 system.web 标签下:
<caching>
<outputCache enableOutputCache="true" />
<outputCacheSettings>
<outputCacheProfiles>
<add duration="14800" enabled="true" varyByParam="*"
name="AssetCacheProfile" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
好的,这很好用。当我在 RetrieveBlob.aspx 后面的代码中放置断点时,它会在第一次触发,而其他所有时间都不会触发。
现在,我丢弃了缓存配置文件,而是在 System.WebServer 下的 Web.Config 中拥有它:
<caching>
<profiles>
<add extension=".swf" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".flv" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".gif" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".png" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".mp3" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".jpeg" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".jpg" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
</profiles>
</caching>
现在缓存不再起作用了。我究竟做错了什么?是否可以在 System.WebServer 的缓存标记下配置动态 aspx 页面的缓存配置文件?
我已经尝试添加这样的内容:
<add extension="RetrieveBlob.aspx" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:00:30"
varyByQueryString="assetId, assetFileId" />
但它不起作用。
一个 url 的例子是:
http://{server}/{application}/trunk/RetrieveBlob.aspx?assetId=31809&assetFileId=11829
我们有一个 RIA 应用程序,300 个客户端在 Intranet 环境中同时使用。他们一起对 IIS (asp.net) 进行每秒 30 次调用(实际上是 60 次,但调用在两个 IIS 服务器上进行负载平衡)。一半的调用正在获取资产(使用缓存配置文件,因此大部分时间缓存都被命中),另一半正在将数据保存到 sql server。
检索资产是使用 aspx 页面完成的。通过 WebORB、asp.net 和 Sql Server 保存数据。所以 WebORB 需要一些处理(amf 解码,GZIP,...)。我们也使用 Spring.NET,并且一些容器对象具有请求范围(不是很多)。
IIS 服务器 --> 虚拟机,4 个 CPU,2 GB RAM。它们基于 Windows 2008 x64 SP2 企业版。
使用 Sql Server 2008。
显然,两个 IIS 服务器的 CPU 始终在 60-70% 左右。
现在,我的问题是,60-70% 的负载是否可以接受,我们如何才能将其降低到更少的百分比(可能只使用一个 IIS 服务器)?+ 2 GB RAM 够用吗?
资产最大可达 20mb,但平均约为 30kb。(60-70% 的负载是通过 30kb 左右的资产实现的)。
使用 weborb 保存的数据非常小(2kb)并且只是一个对象。
在什么情况下可以插入一个简单的记录(表有大约 10 列,其中两个是 xml)使用并行性?
CREATE TABLE [dbo].[PackageSessions](
[PackageSessionId] [int] IDENTITY(1,1) NOT NULL,
[PackageId] [int] NOT NULL,
[UserId] [int] NOT NULL,
[StartDateTime] [datetime] NULL,
[StopDateTime] [datetime] NULL,
[Score] [float] NOT NULL,
[ScoreMax] [float] NOT NULL,
[CompletionStatus] [int] NOT NULL,
[ReviewPlayerContextId] [int] NOT NULL,
[PlayerContextId] [int] NOT NULL,
[ReducedScore] [float] NOT NULL,
[ReducedScoreMax] [float] NOT NULL,
[PackageSnapShot] [xml] NULL,
[InterfaceLanguageId] [int] NOT NULL,
[Data] [xml] NULL,
[PackageSessionLanguageId] [int] NOT NULL,
CONSTRAINT [PackageSessions_PK] PRIMARY KEY CLUSTERED
(
[PackageSessionId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
在我们的一个客户中,将 sql server 配置为 1 以表示并行度。服务器有 8 个 cpu,那么将这个度数限制为 1 的原因是什么?
在我们的 sql server 上,一个查询需要 20 毫秒。如果我查看执行计划,使用了并行性、哈希匹配、位图创建……很多带有两个箭头指向左侧的图像。
在我们的产品运行的客户的 sql server 上,相同的查询需要 2500 毫秒。如果我查看他们的执行计划,没有使用并行性或任何带有箭头的东西......
我已经搜索了几天,不知道为什么查询在他们的 sql 服务器上运行得这么慢。
另一个奇怪的是,在我们的服务器上,查询需要大约 1200 次读取和 0 次写入。在他们的 sql server 上,它需要 150 万次读取和大约 1500 次写入。为什么在读取查询完成时会写入这些内容?
缓存查询怎么可能需要这么长时间。清除缓存需要 25000 毫秒(我知道这太长了,但这不是这里的问题)。缓存后,需要 2500 毫秒。这里可能是什么问题?如果它被缓存,我假设 Sql Server 将它从 RAM 中取出。所以,再一次,2500毫秒???
现在文件被保存为 blg,但我想要一个 txt 版本在 Excel 中导入。
我在客户的生产环境中有一个奇怪的问题。除了 SQL Server 在虚拟服务器上运行之外,我无法提供有关基础架构的任何详细信息。数据、日志和文件流文件在另一台存储服务器上(数据和文件流一起在单独的服务器上登录)。
在我们的本地测试环境中,有一个以这些持续时间执行的特定查询:
- 首先我们清除缓存
- 300ms(第一次需要更长的时间,但从那时起它被缓存了。)
- 20ms
- 15ms
- 17ms
在客户的生产环境中,SQL Server更强大,这些是持续时间(我没有权限清除缓存,明天试试)。
- 2500毫秒
- 2600毫秒
- 2400毫秒
客户生产环境中的服务器功能更强大,但它们确实有虚拟服务器(我们没有)。
可能是什么原因...
您将如何解决这个性能问题?
编辑:
有人问我数据集是否相等,确实如此。我在我们的环境中恢复了他们的数据库。这是真的,这是我看的第一件事。(@Everyone:我添加了编辑,因为这将是许多人首先想到的)。
如果您备份 Sharepoint 的数据库,您是否已备份所有内容?或者实例的文档是否存储在磁盘驱动器上?