小编Nat*_*han的帖子

jQuery Ajax调用 - 在成功时设置变量值

我有一个我正在编写的应用程序,它修改了服务器中缓存对象的数据.修改是通过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)

javascript asp.net ajax jquery web-services

42
推荐指数
2
解决办法
4万
查看次数

批量插入Sql Server

我试图从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)

vb.net sql-server performance

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

在内存中存储数据:会话与缓存与静态

有点背景故事:我正在开发一个Web应用程序,它需要相当多的时间来准备/处理数据,然后再将其提供给用户进行编辑/操作.数据请求任务完成约15/20秒,处理几秒钟.在那里,用户可以动态操纵vaules.任何值的操作都需要完全重新处理数据.

更新:为了避免混淆,我只进行一次数据调用(15秒命中),然后想要将结果保存在内存中,这样我就不必再次调用它,直到用户100%完成它为止.所以,第一次拉动将需要一段时间,但是,使用Ajax,我将打击内存中的数据以不断更新并将响应时间保持在大约2秒左右(我希望).

为了提高效率,我将初始数据移动到内存中并使用Ajax调用回服务器,这样我就可以减少处理时间来处理用户更新时发生的重新计算.

这是我的问题,考虑到性能,存储此数据的最佳方式是什么,假设在任何给定时刻只有1个用户将使用此数据.

此外,用户可能会在此过程中工作几个小时.当用户使用数据工作时,如果会话以某种方式中断,我将需要某种故障保护来保存用户的当前数据(在数据库或序列化二进制文件中).换句话说,我需要一个具有适当钩子的解决方案,以允许我在用户断开连接/分心太久的情况下转储内存对象的数据.

到目前为止,这是我的想法:

会话状态 - 优点:锁定到一个用户.Session End事件是否符合我的故障安全要求.缺点:我当前选项的最慢性能.Session End事件有时很棘手,无法确保正常触发.

缓存 - 优点:良好的性能.可以访问依赖项,这可能是后来的奖励,但在当前范围内并不真正有用.缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤.全球范围 - 必须确保用户不会相互冲突.

静态 - 优点:最好的Perf.易于维护,因为我可以直接利用我当前的类结构.缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤.全球范围 - 必须确保用户不会相互冲突.

有没有人对我应该选择的选项有任何建议/意见?

谢谢!

更新:忘记提及,我使用VB.Net,Asp.Net和Sql Server 2005来执行此任务.

memory session static caching

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

LINQ to Objects自动递增编号

这感觉就像一个完全基本的问题,但是,对于我的生活,我似乎无法找到一个优雅的解决方案.

基本上,我正在进行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查询的上下文中执行此操作(以便我不必在查询后循环集合)?

vb.net asp.net linq-to-objects

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

来自.Net iSeries Provider的AS 400性能

首先,我不是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)

编辑:在看了一下这个问题并使用下面的一些评论后,我开始怀疑我是否因为连接池的收益而遇到这个问题?思考?

asp.net performance ibm-midrange

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

在Reporting Services中获取数据集中的第二个值

这似乎是一个非常简单的问题,但我试图将数据集中的第二个值显示为矩阵的标题值.

在本报告中,假设我有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)

如何在不违反聚合列的范围规则的情况下解决此问题?

ssrs-2008

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