小编Bra*_*Voy的帖子

为什么.NET的File.Open使用UNC路径进行过多的SMB调用?

我有一段代码需要使用UNC路径从NAS服务器打开和读取大量小文本文件.此代码是最初用C++编写但现在转换为C#的模块的一部分.C#版本明显变慢了.我确定打开文件的调用几乎占据了所有的性能差异.使用WireShark我发现这是因为System.IO.File.Open调用比类似的C++代码产生更多的SMB网络请求.

C++代码进行此调用:

FILE *f = _wfsopen(fileName, L"r", _SH_DENYWR);
Run Code Online (Sandbox Code Playgroud)

这导致以下SMB请求序列:

NT Create AndX Request, FID: 0x0004, Path: \\a\\i\\a\\q\\~141106162638847.nmd
NT Create AndX Response, FID: 0x0004
Trans2 Request, QUERY_FILE_INFO, FID: 0x0004, Query File Basic Info
Trans2 Response, FID: 0x0004, QUERY_FILE_INFO
Read AndX Request, FID: 0x0004, 1327 bytes at offset 0
Read AndX Response, FID: 0x0004, 1327 bytes
Close Request, FID: 0x0004
Close Response, FID: 0x0004
NT Create AndX Request, FID: 0x0005, Path: \\a\\i\\a\\q\\~141106162638847.nmd
NT Create AndX Response, FID: 0x0005
Run Code Online (Sandbox Code Playgroud)

C#代码进行此调用:

FileStream f = …
Run Code Online (Sandbox Code Playgroud)

.net c# c++ file-io windows-networking

35
推荐指数
2
解决办法
2590
查看次数

将文件拖到Firefox时dropEffect不起作用

我有一个网页,允许从浏览器外部拖动文件并将其放到我的网页上的目标上.我的应用程序将上传每个文件的副本,因此我将dataTransfer.dropEffect设置为"copy",以便浏览器向用户指示这将导致副本而不是移动.这在Chrome中正常运行:在我的放置目标上拖动文件时,浏览器会显示"复制"光标.但Firefox似乎忽略了dropEffect并继续显示其默认的"移动"光标,同时文件被拖放到我的放置目标上.我做了很多搜索,没有发现像这样的Firefox问题,所以我可能忽略了我的代码中的一些细节.我已经包含了一个简化示例,说明了下面的问题.如果有人能发现我做错了什么,请提前致谢.

<!DOCTYPE html>
<html>
<head>
<title>Test Stuff</title>

<style type="text/css">
P 
{
background-color: #cccccc;
padding: 10px;
}

</style>
<script type="text/javascript">

function DocOnLoad() {
var target = document.getElementById('dropTarget');
target.addEventListener('dragenter', function (e) {
    e.preventDefault();
    e.dataTransfer.dropEffect = 'copy';
});
target.addEventListener('dragover', function (e) {
    e.preventDefault();
    e.dataTransfer.dropEffect = 'copy';
});
target.addEventListener('drop', function (e) {
    e.preventDefault();
    var files = e.dataTransfer.files;
    alert(files[0].name);
});
}



</script>

</head>

<body onLoad="DocOnLoad()" >

<p id="dropTarget">Drop target.</p>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

javascript firefox html5 drag-and-drop

9
推荐指数
2
解决办法
2790
查看次数

使用.NET追加到大文件时,如何避免过多的网络文件I/O?

我有一个程序打开一个大的二进制文件,向它添加少量数据,并关闭该文件.

FileStream fs = File.Open( "\\\\s1\\temp\\test.tmp", FileMode.Append, FileAccess.Write, FileShare.None );
fs.Write( data, 0, data.Length );
fs.Close();
Run Code Online (Sandbox Code Playgroud)

如果test.tmp在运行此程序之前为5MB且数据阵列为100字节,则此程序将导致超过5MB的数据通过网络传输.我原本以为文件中的数据不会通过网络传输,因为我没有读它或写它.有什么方法可以避免这种行为吗?这使得追加非常大的文件非常缓慢.

.net c# file-io networking

7
推荐指数
1
解决办法
1088
查看次数