Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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#高效地在数据库中写入数据?_C#_Database_Performance - Fatal编程技术网

如何使用c#高效地在数据库中写入数据?

如何使用c#高效地在数据库中写入数据?,c#,database,performance,C#,Database,Performance,我的windows应用程序正在读取文本文件并将其插入数据库。问题是文本文件非常大(至少对于我们的低端机器而言)。它有10万行,将其写入数据库需要时间 你们能建议我如何有效地读写数据,这样就不会占用机器内存吗? 仅供参考。。。 列分隔符:“|” 行分隔符:换行符 它大约有10列。。(它有客户的信息…如名字、姓氏、地址、电话、电子邮件等) 考虑到……我被限制使用BULK CMD 您没有说您使用的是哪种数据库,但如果是SQL Server,那么您应该查看批量插入命令或BCP实用程序。鉴于绝对没有机会从

我的windows应用程序正在读取文本文件并将其插入数据库。问题是文本文件非常大(至少对于我们的低端机器而言)。它有10万行,将其写入数据库需要时间

你们能建议我如何有效地读写数据,这样就不会占用机器内存吗? 仅供参考。。。 列分隔符:“|” 行分隔符:换行符

它大约有10列。。(它有客户的信息…如名字、姓氏、地址、电话、电子邮件等)


考虑到……我被限制使用BULK CMD

您没有说您使用的是哪种数据库,但如果是SQL Server,那么您应该查看
批量插入
命令或BCP实用程序。

鉴于绝对没有机会从安全人员那里获得帮助并使用批量命令,我将采取以下方法:

  • 确保在插入数据库之前先读取整个文本文件。从而减少了I/O

  • 检查目标表上有哪些索引。是否可以插入到一个没有索引或依赖项的临时表中,以使单个插入更快

  • 插入后是否需要立即显示此数据?如果没有,那么您可以在上面的步骤2中有一个计划作业从临时表中读取数据,并插入到目标表中(包含索引、外键等)

  • 您是否可以将自定义程序集导入Sql Server?(我假设它是sql server,因为您之前已经说过使用了批量插入)

    然后,您可以调用程序集来执行(主要是)您需要的任何操作,比如从某个服务获取文件(或者您的选项是什么),解析并直接插入到表中


    这不是我喜欢的选项,但有时它可能会节省内存。

    它实际上是在“占用”内存吗?还是运行缓慢?或者两者都有?(它们通常是两个离散的问题)@kirk。我都相信。但是机器也是低端的-celeron。如果你在文件中进行流式传输,没有理由占用内存。嗨,这是另一个问题。之前我使用SP使用大容量插入…问题是,由于安全原因,现在我无法在数据库服务器上转储文本文件。。整个计划是读取文本文件并将其写入临时表,然后调用我现有的SP,SP最终将使用我们的业务将其写入数据库logics@Crawling-也许您可以说服安全人员允许数据库服务器访问可用于批量加载数据的网络共享。这(可能)比单个插入要快得多。谁说这个文件可以放在内存中?试图使其适合可能会导致程序崩溃或由于交换而陷入困境。@Steven Sudit-这是一个很好的观点!然后,方法是将文件分块,使其在“低端”机器上工作。我面临的唯一问题是读取文本文件。如果我立即读取它,则在低端机器上会出现问题。建议我在这里做什么?说来话长。我的应用程序在web服务器上…作为文件监视程序工作…文件进入…读取并检查文件的完整性,调用存储过程并传递ftp、文件位置信息。。。现在存储过程返回到Web服务器…使用ftp调用获取文件…并将文件写回Db服务器,然后执行大容量插入等操作。。。所以现在的问题是SP使用的是windows FTP…而不是SSL。由于安全原因…现在SP的FTP调用无法完成。所以我不能在DB服务器上做很多事情。