我有一个我正在编写的应用程序,它修改了服务器中缓存对象的数据.修改是通过ajax调用执行的,该调用基本上更新了该对象的属性.当用户完成工作后,我有一个基本的"保存更改"按钮,允许他们保存数据并刷新缓存的对象.
为了保护用户,我想警告他们,如果他们尚未保存,则在对服务器对象进行修改时尝试离开页面.因此,我创建了一个名为IsInitialized的Web服务方法,该方法将根据是否已保存更改返回true或false.如果他们尚未保存,我想提示用户并让他们有机会取消他们的导航请求.
这是我的问题 - 虽然我的调用工作正常,但我似乎无法获得ajax成功调用来设置其回调函数的变量值.这是我现在的代码.
////Catches the users to keep them from navigation off the page w/o saved changes...
window.onbeforeunload = CheckSaveStatus;
var IsInitialized;
function CheckSaveStatus() {
var temp = $.ajax({
type: "POST",
url: "URL.asmx/CheckIfInstanceIsInitilized",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
IsInitialized = result.d;
},
error: function(xmlHttpRequest, status, err) {
alert(xmlHttpRequest.statusText + " " + xmlHttpRequest.status + " : " + xmlHttpRequest.responseText);
}
});
if (IsInitialized) {
return "You currently have unprocessed changes for this Simulation."; …Run Code Online (Sandbox Code Playgroud) 我试图从Vb.Net插入大量的记录到SQL Server 2005.虽然插入工作正常,但我正尽力尽力使其尽快完成.目前,100,000条记录需要大约11分钟.从应用程序向SQL Server中插入大量记录的建议方法是什么?
我当前的apporach基本上是打开连接,遍历我的信息列表并触发单个sql插入语句,然后关闭连接.谁有关于如何做到这一点的更好的建议?
当前功能:
Public Sub BatchInsert(ByVal ParamCollections As List(Of SqlParameter()))
Dim Conn As SqlConnection = New SqlConnection(DBHelper.DatabaseConnection)
Using scope As TransactionScope = New TransactionScope()
Using Conn
Dim cmd As SqlCommand = New SqlCommand("sproc_name", Conn)
Conn.Open()
cmd.CommandType = CommandType.StoredProcedure
For i = 0 To ParamCollections.Count - 1
cmd.Parameters.Clear()
cmd.Parameters.AddRange(ParamCollections(i))
cmd.ExecuteNonQuery()
Next
Conn.Close()
scope.Complete()
End Using
End Using
End Sub
Run Code Online (Sandbox Code Playgroud) 有点背景故事:我正在开发一个Web应用程序,它需要相当多的时间来准备/处理数据,然后再将其提供给用户进行编辑/操作.数据请求任务完成约15/20秒,处理几秒钟.在那里,用户可以动态操纵vaules.任何值的操作都需要完全重新处理数据.
更新:为了避免混淆,我只进行一次数据调用(15秒命中),然后想要将结果保存在内存中,这样我就不必再次调用它,直到用户100%完成它为止.所以,第一次拉动将需要一段时间,但是,使用Ajax,我将打击内存中的数据以不断更新并将响应时间保持在大约2秒左右(我希望).
为了提高效率,我将初始数据移动到内存中并使用Ajax调用回服务器,这样我就可以减少处理时间来处理用户更新时发生的重新计算.
这是我的问题,考虑到性能,存储此数据的最佳方式是什么,假设在任何给定时刻只有1个用户将使用此数据.
此外,用户可能会在此过程中工作几个小时.当用户使用数据工作时,如果会话以某种方式中断,我将需要某种故障保护来保存用户的当前数据(在数据库或序列化二进制文件中).换句话说,我需要一个具有适当钩子的解决方案,以允许我在用户断开连接/分心太久的情况下转储内存对象的数据.
到目前为止,这是我的想法:
会话状态 - 优点:锁定到一个用户.Session End事件是否符合我的故障安全要求.缺点:我当前选项的最慢性能.Session End事件有时很棘手,无法确保正常触发.
缓存 - 优点:良好的性能.可以访问依赖项,这可能是后来的奖励,但在当前范围内并不真正有用.缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤.全球范围 - 必须确保用户不会相互冲突.
静态 - 优点:最好的Perf.易于维护,因为我可以直接利用我当前的类结构.缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤.全球范围 - 必须确保用户不会相互冲突.
有没有人对我应该选择的选项有任何建议/意见?
谢谢!
更新:忘记提及,我使用VB.Net,Asp.Net和Sql Server 2005来执行此任务.
这感觉就像一个完全基本的问题,但是,对于我的生活,我似乎无法找到一个优雅的解决方案.
基本上,我正在进行LINQ查询,从查询中创建一个新对象.在新对象中,我想生成一个自动递增的数字,以便我保留一个选择顺序供以后使用(Iter在我的例子中命名).
这是我目前的解决方案,它做我需要的:
Dim query2 = From x As DictionaryEntry In MasterCalendarInstance _
Order By x.Key _
Select New With {.CalendarId = x.Key, .Iter = 0}
For i = 0 To query2.Count - 1
query2(i).Iter = i
Next
Run Code Online (Sandbox Code Playgroud)
有没有办法在LINQ查询的上下文中执行此操作(以便我不必在查询后循环集合)?
首先,我不是AS 400的人.所以请原谅我在这里问任何无用的问题.
基本上,我正在开发一个.Net应用程序,需要访问AS400以获取一些实时数据.虽然我有系统工作,但我在查询之间得到了非常不同的性能结果.通常,当我在AS400上针对SPROC发出第一个请求时,我看到了大约14秒的时间来获取完整的数据集.在初始呼叫之后,任何后续呼叫通常只需要约1秒钟才能返回.这种性能提升大约需要20分钟左右才能再次使用14秒.
有趣的是,如果存储过程直接在iSeries Navigator上执行,它总是在几毫秒内返回(响应时间没有变化).
我想知道它是否是一个缓存/执行计划问题,但我只能将我的SQL SERVER逻辑应用于AS400,这并不总是匹配.
什么我可以做免费获赠更多洽响应时间或者干脆洞察力至于为什么AS400以这种方式行事时,我使用了.NET中的iSeries的数据提供任何建议?我应该使用更好的访问方法吗?
以防万一,这是我用来连接AS400的代码
Dim Conn As New IBM.Data.DB2.iSeries.iDB2Connection(ConnectionString)
Dim Cmd As New IBM.Data.DB2.iSeries.iDB2Command("SPROC_NAME_HERE", Conn)
Cmd.CommandType = CommandType.StoredProcedure
Using Conn
Conn.Open()
Dim Reader = Cmd.ExecuteReader()
Using Reader
While Reader.Read()
'Do Something
End While
Reader.Close()
End Using
Conn.Close()
End Using
Run Code Online (Sandbox Code Playgroud)
编辑:在看了一下这个问题并使用下面的一些评论后,我开始怀疑我是否因为连接池的收益而遇到这个问题?思考?
这似乎是一个非常简单的问题,但我试图将数据集中的第二个值显示为矩阵的标题值.
在本报告中,假设我有2个数据集.在Dataset1中,我有一个查询,可以为参数下拉列表选择下拉3个值.在Dataset2中,我返回一个结果集并将其绑定到我的矩阵.
在矩阵中,我有我的重复列,然后右边有3个额外的分组列,它们具有我想要显示的aggrigate值.在这3列的标题上,我想显示在我的Parameters数据集中显示的3个值.在矩阵(及其数据集)的上下文中,我可以使用以下方法获取不同数据集的第一个和最后一个值(在本例中为Dataset1):
=First(Fields!DateDisplay.Value, "Dataset1")
=Last(Fields!DateDisplay.Value, "Dataset1")
Run Code Online (Sandbox Code Playgroud)
我需要得到类似的东西:
=Second(Fields!DateDisplay.Value, "Dataset1")
Run Code Online (Sandbox Code Playgroud)
如何在不违反聚合列的范围规则的情况下解决此问题?
asp.net ×3
performance ×2
vb.net ×2
ajax ×1
caching ×1
ibm-midrange ×1
javascript ×1
jquery ×1
memory ×1
session ×1
sql-server ×1
ssrs-2008 ×1
static ×1
web-services ×1