我正在编写一个函数来获取目录中的所有文件,但是通过将每个子目录添加到线程池来并行执行.我认为这意味着每个目录都会被并行遍历,因为有很多子目录,所以它比按顺序执行要快得多.我的代码如下:
private object addlock = new object();
private void addFiles(string[] newFiles)
{
lock (addlock) {
files.AddRange( newFiles );
Console.WriteLine( "Added {0} files", newFiles.Length );
}
}
private void getFilesParallel(string dir)
{
if (!Directory.Exists( dir )) {
return;
}
string[] dirs = Directory.GetDirectories( dir, "*", SearchOption.TopDirectoryOnly );
ManualResetEvent mre = new ManualResetEvent( false );
ThreadPool.QueueUserWorkItem( (object obj) =>
{
addFiles( Directory.GetFiles( dir, "*", SearchOption.TopDirectoryOnly ) );
mre.Set();
} );
Process currentProcess = Process.GetCurrentProcess();
long memorySize = currentProcess.PrivateMemorySize64;
Console.WriteLine( "Used {0}", memorySize …
Run Code Online (Sandbox Code Playgroud) 我在C#中有一个程序,我创建了各种类,所有这些都需要调用数据库.所以我决定创建一个静态类来处理所有调用,以便我可以非常轻松地应用深远的变化.在那个类中,我有调用SqlCommand
(ExecuteReader()
等等)各个部分的函数我最终厌倦了重写所有的连接代码,并将它抽象到另一个函数中getSqlCommand()
,该函数只返回一个初始化的函数SqlCommand
,用于执行各种命令.我选择不将其传递SqlCommand
回其他程序(虽然它是一种公共方法,以防万一我需要它),因为如果你在将结果返回给程序之前我会做一些预处理.
我的问题是,如果/何时SqlConnection
关闭?因为它作为a中的返回值被传回SqlCommand
,它会保持打开状态吗?如果是的话,我可以关闭吗?这是一些代码(略微剥离),所以你可以看到我在做什么,提前谢谢!
创建的功能SqlCommand
:
public static SqlCommand GetSqlCommand(string query)
{
using (SqlConnection dbConnection = new SqlConnection( SQLConn )) {
dbConnection.Open();
SqlCommand cmd = new SqlCommand( query, dbConnection );
cmd.CommandTimeout = 0;
return cmd;
}
}
Run Code Online (Sandbox Code Playgroud)
静态类中命令用法的示例:
public static SqlDataReader executeReader( string query )
{
try {
return GetSqlCommand(query).ExecuteReader();
} catch (SqlException) {
//Notify User and Resolve Error
}
return null;
}
Run Code Online (Sandbox Code Playgroud)