小编JPR*_*ddy的帖子

使用Linq到Sql的插入过程非常慢

我正在使用LinqToSql从C#向SqlServer 2008 Express DB插入大量记录.看起来插入速度非常慢.以下是代码段.

public void InsertData(int id)
{

  MyDataContext dc = new MyDataContext();

  List<Item> result = GetItems(id);

  foreach (var item in result)
  {
    DbItem dbItem = new DbItem(){ItemNo = item.No, ItemName=item.Name};
    dc.Items.InsertOnSubmit();
  }

  dc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

我做错了吗?或者使用Linq插入大量记录是一个糟糕的选择?

更新:感谢您的所有答案. @ p.campbell:对于记录计数很抱歉,这是一个错字,实际上是100000左右.记录也一直到200k.

根据所有建议,我将此操作移动到部分(也是需求更改和设计决策),并以小块的形式检索数据,并在它到来时将它们插入到数据库中.我已将此InsertData()方法放在线程操作中,现在使用SmartThreadPool创建一个包含25个线程的池来执行相同的操作.在这种情况下,我一次只插入100条记录.现在,当我尝试使用Linq或SQL查询时,它在时间方面没有任何区别.

根据我的要求,此操作计划每小时运行一次,并为大约4k-6k用户提取记录.所以,现在我将每个用户数据(检索和插入到数据库)操作汇集为一个任务并分配给一个线程.现在整个过程大约需要45分钟,大约有250,000条记录.

有没有更好的方法来完成这种任务?或者任何人都可以建议我如何改进这个过程?

c# sql-server linq-to-sql

9
推荐指数
1
解决办法
8616
查看次数

我可以在IIS6上部署.net 4.0 Web应用程序吗?

我最近将VS 2008升级到VS 2010.在我们的服务器上安装了IIS6,我们不能在不久的将来改变它.即使我们将开发要部署在IIS7上的新应用程序,但如果情况需要我们可能需要使用.net 4.0开发应用程序并部署在IIS6上,那么在这种情况下我想知道IIS6是否支持.net 4.0应用程序或不?

如果我可以部署,那么在部署之前是否需要处理任何配置或我应该更改的任何其他设置?

asp.net iis-6 webforms .net-4.0 web-deployment

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

为什么.net Threadpool仅用于短时间跨度任务?

我在很多地方读过.net Threadpool用于短时间跨度任务(可能不超过3秒).在所有这些提及中,我没有找到一个具体的原因,为什么它不应该被使用.

甚至有些人说,如果我们使用长时间的任务并导致死锁,它会导致令人讨厌的结果.

有人可以用简单的英语用技术原因解释它为什么我们不应该使用线程池进行长时间跨度任务?

具体来说,我甚至想提供一个场景,并想知道为什么ThreadPool不应该在这种情况下使用,并且背后有正当的理由.

场景:我需要处理数千个用户的数据.从本地数据库检索用户的处理数据,并使用该信息连接到托管在其他位置的API,API处理后的响应将存储在本地数据库中.

如果我使用线程限制为20的ThreadPool,有人可以在这种情况下解释我的陷阱吗?每个用户的处理时间可以在3秒至1分钟(或更长)的范围内.

.net c# multithreading threadpool

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

使用ClickOnce部署识别目标计算机(32位或64位)

我有一个Windows窗体应用程序,并通过ClickOnce部署部署该应用程序.现在,我有一个第三方DLL文件,它有32位和64位操作系统的不同版本.

是否可以通过ClickOnce基于目标计算机(32位或64位)部署不同的DLL文件?

.net deployment clickonce 32bit-64bit winforms

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

使用javascript:history.back(); 有什么未知的问题?

在我的网站上,我有两个页面叫做First.aspx和second.aspx.

从first.aspx我将用户重定向到second.aspx点击一个链接.

在second.aspx页面中,我在点击取消输入按钮(不是asp按钮)时使用javascript:history.back().这样做是为了避免重新加载最后一页,因为用户在此页面上没有做任何事情,并点击取消返回上一页.

我想知道是否存在任何安全问题或与使用此history.back()相关的任何其他问题?如果是这样,他们会遇到什么样的问题?

而不是这个,我应该使用asp按钮并使用response.redirect()重定向回第一页?哪一个更好的方法?

javascript c# asp.net

6
推荐指数
1
解决办法
1030
查看次数

从函数返回catch块,最终阻塞会发生什么?

我尝试捕获finally块,如果发生一些异常,我将从catch块返回,所以最后块仍然执行,如果是的话,什么时候?返回之前还是返回之后?

这是正确的做法吗?

try
{
// do something
}

catch (Exception)
{    
  return false;
}
finally
{
  if (connection.State == ConnectionState.Open) connection.Close();
}
Run Code Online (Sandbox Code Playgroud)

c# exception-handling return-value try-catch-finally

6
推荐指数
1
解决办法
2408
查看次数

当用户在代理后面时,从客户端应用程序访问WCF服务

我在服务器上托管了WCF服务.客户端应用程序正在Windows 7计算机上访问该服务.Windows 7计算机上有两个用户.Windows应用程序是通过Clickonce安装的,因此两个用户可以使用单独的实例.

当userA通过Winforms应用程序访问服务时,它可以正常工作,但是当同一台机器上的userB尝试访问它时会抛出以下异常:通信异常:远程服务器返回意外响应:(417)期望失败.

Server stack trace: 
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Myapp.ServiceProxy.IMyAPIService.GetData(String userName, …
Run Code Online (Sandbox Code Playgroud)

c# wcf proxy winforms

6
推荐指数
1
解决办法
6595
查看次数

通过deploy.cmd文件在天蓝色Web应用程序部署中Grunt安装失败

我正在尝试使用Azure的Git部署来构建和打包我的项目.

我创建了以下文件

  1. .deployment
  2. deploy.cmd
  3. Gruntfile.js
  4. 的package.json
  5. bower.json

我跟随杰伊哈里斯的博客文章.下面给出了deploy.cmd文件中的部署部分:

:: 2. Select node version
call :SelectNodeVersion

:: 3. Install npm packages
IF EXIST "%DEPLOYMENT_TARGET%\package.json" (
  pushd "%DEPLOYMENT_TARGET%"
  call :ExecuteCmd !NPM_CMD! install --production
  IF !ERRORLEVEL! NEQ 0 goto error
  popd
)

:: 4. Install bower packages
IF EXIST "%DEPLOYMENT_TARGET%\bower.json" (
  call !NPM_CMD! install bower
  IF !ERRORLEVEL! NEQ 0 goto error
  call .\node_modules\.bin\bower install
  IF !ERRORLEVEL! NEQ 0 goto error
)

:: 4. run grunt
IF EXIST "%DEPLOYMENT_TARGET%\Gruntfile.js" ( 
  call !NPM_CMD! …
Run Code Online (Sandbox Code Playgroud)

git deployment azure bower grunt-cli

6
推荐指数
1
解决办法
387
查看次数

DataGridViewCheckBoxCell类型的DataGridView列始终是只读/禁用的

我正在使用.NET Windows窗体DataGridView,我需要编辑一个DataBound列(绑定在布尔DataTable列上).为此,我指定像这样的单元格模板:

DataGridViewColumn column = new DataGridViewColumn(new DataGridViewCheckBoxCell());

你看我需要一个CheckBox单元格模板.

我面临的问题是该列始终是只读/禁用的,就好像它是TextBox类型一样.它根本不显示复选框.

有关如何使用DataGridView的可编辑复选框列的任何想法?

更新:对于Windows窗体,请.

谢谢.

datagridview datagridviewcheckboxcell winforms

5
推荐指数
2
解决办法
3862
查看次数

5
推荐指数
1
解决办法
6714
查看次数