Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算目录大小:最好通过DirectoryInfo或将文件大小存储在数据库中?_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 计算目录大小:最好通过DirectoryInfo或将文件大小存储在数据库中?

C# 计算目录大小:最好通过DirectoryInfo或将文件大小存储在数据库中?,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我们有一个ASP.NETMVC4应用程序,用户可以将文件上传到文件夹中 现在我们要限制此文件夹的大小,以避免其无法控制地增长 要做到这一点,可以考虑文件夹的当前大小,因此在上载文件时,我们可以检查是否达到固定大小限制并取消上载 问题是,我们担心随着进入源目录的文件数量的增加,这会大大减慢我们的上传过程 我们可以使用DirectoryInfo构建一个检索文件夹大小的方法,或者我们可以在数据库中存储每个上载文件的大小(我们已经存储了它们的路径,因为它们与我们的业务模型上的其他元素相关),并构建一个通

我们有一个ASP.NETMVC4应用程序,用户可以将文件上传到文件夹中

现在我们要限制此文件夹的大小,以避免其无法控制地增长

要做到这一点,可以考虑文件夹的当前大小,因此在上载文件时,我们可以检查是否达到固定大小限制并取消上载

问题是,我们担心随着进入源目录的文件数量的增加,这会大大减慢我们的上传过程

我们可以使用DirectoryInfo构建一个检索文件夹大小的方法,或者我们可以在数据库中存储每个上载文件的大小(我们已经存储了它们的路径,因为它们与我们的业务模型上的其他元素相关),并构建一个通过添加存储在数据库中的值来检索文件夹大小的方法


哪种方法会更好更快?

如果你只是获取文件夹大小,我认为从数据库获取目录大小不好。。因为上传任何文件后,你必须更新数据库,并且为了检查限制,必须从数据库获取目录大小…但是使用获取目录信息大小的方法更容易,性能也更好。

I投票支持将文件夹大小存储在DB中。如果使用
DirectoryInfo
,可能会返回不正确的信息,以防有人正在上载文件。无论有人上传文件,在DB中存储都会准确地给出当前的数字。

好的,枚举文件的速度取决于此文件夹中的文件数量。 你知道这个数字吗

您可以从命令行运行它,它将创建5000个文件

For /L %i in (1,1,5000) do fsutil file createnew A%i.tmp 12000

然后进行性能测试。

根据文件数量,数据库选项可能是最快的,但您认为DirectoryInfo的速度会有多慢?如果这仅仅是2-3秒,我不会想象人们在上传文件时会为此烦恼file@Nunners它还会导致大量IO,这可能会减慢IO的其余部分-如果这不仅仅是“永远不要使用转储文件”这很容易成为一个瓶颈。如果它在形式上不是很关键,它应该高于4.2mb或类似的东西,并且您的文件在大小上有某种相似性(例如,它们都在500kb左右),那么只需获取目录中的文件数,并将其乘以500kb即可。性能好吗?让我猜猜,你从来没有在真正的文件服务器上处理过这种方法,对吗?比如说有一百万个文件。用户仍然需要更新数据库。这意味着您的加分无论如何都不存在。@TomTom如果我们想在数据库中添加目录大小,我们必须使用方法获取它并将其存储在数据库中…如果目录大小更改,您必须更新数据库。。。您必须使用方法和数据库…它好吗?除非他有一个纯文件管理器,否则他无论如何都会管理数据库中的信息。标记、注释等-因此无论如何都必须询问数据库。除此之外,在数据库中存储单个数字(文件大小)的开销是可以忽略不计的。@M.Azad我想您对OP有点误解,他说的是存储每个文件大小,然后编写一个查询,以根据文件夹获取其总和。他不必每次都重新计算整个文件夹的大小。@M.Azad你用你的大脑来制定规格?你从不计算限制,你设定它。作为程序员,您可以定义当上传超过限制时会发生什么。这两种情况完全相同,因此问题与此处提出的问题无关。您需要将文件保存在数据库中,以便进行选择和其他许多事情(如标记),除非您的应用程序很简单—将文件大小存储在一小段附加信息中。一旦你有很多文件,DirectoryInfo可能会花费一些时间。正如TomTom所说,从长远来看,DB值可能会更快,并且可以在更大的应用程序中启用缓存。