- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 .net4 IIS7 的高度并行 Web 环境中将记录写入(附加)文件的最佳选项是什么?我使用 ashx http 处理程序来接收应快速写入文件的小部分数据。首先我使用:
using (var stream = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite, 8192))
{
stream.Write(buffer, 0, buffer.Length);
}
但我注意到一些记录已损坏或不完整,可能是因为 FileShare.ReadWrite。接下来我尝试将其更改为 FileShare.Read。那里没有损坏的记录,但时不时地我会得到这个异常:System.IO.IOException:该进程无法访问该文件...因为它正在被另一个进程使用。
理想情况下,我希望操作系统对并发写入请求进行排队,以便最终写入所有记录。我应该使用什么文件访问 API?
最佳答案
有两个选项,具体取决于大小。如果大小很小,可能最好的选择是简单地通过某些共享锁来同步对文件的访问。如果可能的话,保持文件打开(偶尔刷新)而不是不断地打开/关闭也是一个好主意。例如:
class MeaningfulName : IDisposable {
FileStream file;
readonly object syncLock = new object();
public MeaningfulName(string path) {
file = new FileStream(fileName, FileMode.Append, FileAccess.Write,
FileShare.ReadWrite, 8192);
}
public void Dispose() {
if(file != null) {
file.Dispose();
file = null;
}
}
public void Append(byte[] buffer) {
if(file == null) throw new ObjectDisposedException(GetType().Name);
lock(syncLock) { // only 1 thread can be appending at a time
file.Write(buffer, 0, buffer.Length);
file.Flush();
}
}
}
这是线程安全的,并且可以毫无问题地提供给所有 ashx。
但是,对于较大的数据,您可能需要查看同步的读写器队列 - 即所有写入器(ashx命中)都可以将数据扔到队列中,并使用单个专用写入器线程将它们出列并附加。这会消除 ashx 的 IO 时间,但是您可能希望限制队列大小,以防编写器跟不上。这里有一个 capped synchronized reader/writer queue 的示例.
关于.net - 在高负载的 .ashx http 处理程序中将记录附加到磁盘文件的最快、最安全的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8442119/
我遇到了一个关于呈现验证码图像的 ASHX 处理程序的真正令人烦恼的问题。真正让人头疼的是,它在两个月前还运行良好,而当我今天再次使用它时,它就停止工作了。 我得到的是一个经常抛出验证码的页面。这是来
每当我访问我的 ashx,例如 download.ashx?id=18 时,它都会获取文件,但是当保存对话框弹出时,它要我保存 download.ashx 而不是我存储在数据库中的文件(让说 mypd
我在使用 ASHX 处理程序时遇到问题。下面这段代码在本地机器上工作正常,但在服务器上不工作。 public void ProcessRequest(HttpContext context) {
1,sumbit表单提交 WebForm1.aspx源码: 复制代码代码如下: <%@ Page Language="C#" AutoEve
我有一个 ashx 处理程序,用于从 flex 页面上传文件。我无法扩展表单例份验证来保护 ashx 文件。有办法做到这一点吗? 最佳答案 您始终可以检查 .ashx 文件中的 context.Req
我在网上看到了很多关于如何通过从 UnsecuredLayoutsPageBase 等继承来允许匿名访问特定 SharePoint 应用程序页面的信息。 如何为布局目录中的 ashx 处理程序实现相同
我有 ashx 文件,我想从 ashx 重定向到 aspx 页面。一些解决方案? 最佳答案 void ProcessRequest(HttpContext context) { contex
我的业务逻辑代码存储在 .ashx 文件中。我发送一个 POST 请求来创建数据,并发送一个 GET 请求来检索 JSON 数据,然后将其显示在页面中。 我的问题是:如何防止 JoeNobody 直接
我正在尝试从我的 Amazon S3 存储桶加载远程图像并将其以二进制形式发送到浏览器。我也在尝试同时学习 ASP.Net。我多年来一直是一个经典的程序员,需要改变。我昨天开始,今天第一次头痛。 在我
我需要将大量数据从 Web 应用程序发送到 ASSX 处理程序。然后,处理程序会将数据发送到 Web 服务以获取响应。 (处理程序处理 Web 服务的原因是因为 Web 应用程序是用经典 ASP 编写
我正在尝试从我的 Amazon S3 存储桶加载远程图像并将其以二进制形式发送到浏览器。我也在尝试同时学习 ASP.Net。我多年来一直是一个经典的程序员,需要改变。我昨天开始,今天第一次头痛。 在我
我在我的应用程序中实现了一个适用于图像的通用处理程序,但是当我在浏览器中使用图像的查询字符串手动键入处理程序 URL 时,它会提示下载而不是显示。这是我的代码: public void Process
进行 ajax 调用 var request = $.ajax({ type: 'POST', url: "http://localhost/thcstore/AJAX/Aja
我在将逗号分隔的字符串拆分为数组时遇到问题。在我的 ashx 处理程序页面中,我的字符串如下所示: context.Response.Write(string.Format("{0},{1},{2},
双重道歉 - 首先,我是 ASP.net 的新手,所以我确定这是一个非常幼稚的问题,其次,看起来已经有一百个关于 ASP.NET 中相对路径的问题.不幸的是 - 我找不到能回答我问题的答案。 背景 -
我已经浏览了基本的 MSDN 信息和一些教程。根据我目前所学,我已经能够制作两个 .ashx 处理程序,我称之为 ImageHandler.ashx 和 PDFHandler.ashx。它们会按照您的
除了类似的问题,我找不到解决问题的方法。我对 JavaScript 也不是很熟练。 我创建了一个 ashx 处理程序来从 Sharepoint 站点下载文件。当数据库中的文件存在时,一切正常。如果文件
我有一个从 MySql 返回的图像。 Mysql中它的数据类型是image。我用 ashx 处理图像。下面的代码显示了我的 ashx 文件。 string imageID = context.Requ
当用户在浏览器中查看 ashx 文件时,我想更改打开窗口的“页面标题”。用户单击将在浏览器的新选项卡中打开的文档,并显示该文档(即 Word、Excel、PDF 等)。现在发生了什么,当我希望标题显示
我正在使用 ashx 提供来自数据库的图像,是否可以让用户单击允许他们在计算机上下载文件的链接。 (IE 显示保存对话框)就像您下载文件一样。这可能吗? 最佳答案 如果您希望它提示保存,请确保在创建响
我是一名优秀的程序员,十分优秀!