- Код: Выделить всё
Dim Arr_Str(99999999) as String * 4
При работе программа сильно тормозит систему на ноутбуке. Возможно есть другие пути использования такого массива?
Dim Arr_Str(99999999) as String * 4
alibek писал(а):Тебе не нужен такой массив.
jangle писал(а):
- Код: Выделить всё
Dim Arr_Str(99999999) as String * 4
При работе программа сильно тормозит систему на ноутбуке. Возможно есть другие пути использования такого массива?
MIT писал(а):Вариант со словарем не подойдет?
Мы храним только индекс, по которому что-то есть, в качестве ключа и информацию в качестве значения. Т.е. dict(23513453) - не равно ничему, а, например, в dict(98684) лежат данные.
Да он какбэ нигде и не хранится. Этот индекс-ключ будет тобой использоваться для вытаскивания из словаря значения.jangle писал(а):Мне индекс хранить не нужно.
Debugger писал(а):Можно использовать файл в качестве массива. Быстрее или медленнее будет - не знаю.
MIT писал(а):Да он какбэ нигде и не хранится. Этот индекс-ключ будет тобой использоваться для вытаскивания из словаря значения.jangle писал(а):Мне индекс хранить не нужно.
Public c As Collection
Private Sub Form_Load()
Set c = New Collection
Dim indx As Long
indx = CLng(Rnd * 1000000)
c.Add "1234", CStr(indx)
On Error Resume Next
Dim v1 As String, v2 As String
v1 = c(CStr(4444))
v2 = c(CStr(indx))
Stop
End Sub
MIT писал(а):Не очень элегантно, конечно, но смысл, думаю, донести получилось:
- Код: Выделить всё
Public c As Collection
Private Sub Form_Load()
Set c = New Collection
Dim indx As Long
indx = CLng(Rnd * 1000000)
c.Add "1234", CStr(indx)
On Error Resume Next
Dim v1 As String, v2 As String
v1 = c(CStr(4444))
v2 = c(CStr(indx))
Stop
End Sub
И, да, не словарь, а коллекция... Словари — это в .NET`е.
Public Property Get Arr_Str(ByVal index As Long) As String
Arr_Str = Space(4)
Get #f, index * 4 + 1, Arr_Str
End Property
Public Property Let Arr_Str(ByVal index As Long, newVal As String)
Put #f, index * 4 + 1, newVal
End Property
Dim mArr1(0 To 49999999) As String * 4
Dim mArr2(50000000 To 99999999) As String * 4
Public Property Get Arr_Str(ByVal index As Long) As String
If index >= 50000000 Then
Arr_Str = mArr1(index)
Else
Arr_Str = mArr2(index)
End If
End Property
Public Property Let Arr_Str(ByVal index As Long, newVal As String)
If index >= 50000000 Then
mArr1(index) = newVal
Else
mArr2(index) = newVal
End If
End Property
. Словари — это в .NET`е.
Вот обязательно надо прицепится к .NET`у, это типа круто, да?Хакер писал(а):Словари — это и в земном программировании, а не только в «божественном» .NET.
jangle писал(а):При работе программа сильно тормозит систему на ноутбуке.
Не на слово ".NET", а на бессмысленные/необоснованные/глупые отрицательные выкрики в сторону данной технологии.iGrok писал(а):MIT, что-то у тебя самого какая-то болезненная реакция на слово ".NET".
Option Explicit
Dim Arr(0 To 99999999) As Long
Private Sub Command1_Click()
Dim i As Long
For i = 1 To 99999999
Arr(i) = i
Me.Caption = i
DoEvents
Next i
End Sub
Public Property Get Arr_Str(ByVal index As Long) As String
Static s As String * 4
Get #f, index * 4 + 1, s
Arr_Str = s
End Property
jangle писал(а):Возможно это потому, что у меня отключен файл подкачки. Cтранно, что отваливается возможность переключения раскладки клавиатуры. Вот тебе и "надежная" операционная система!
FaKk2 писал(а):jangle, вот запереть тебя в ванной, запереть двери/окна и включить воду. Я уверен что когда вода достигнет потолка ты будешь задыхаться и вообще вести себя странно. Вот тебе и "надежный" человек!
jangle писал(а):от процесса который забирает 200 мегабайт оперативки
alibek писал(а):jangle писал(а):от процесса который забирает 200 мегабайт оперативки
И как ты это посчитал?
jangle писал(а):В таскменеджере посмотрел
Option Explicit
Dim Arr(0 To 99999999) As Long
Dim bWrk As Boolean
Private Sub Check1_Click()
bWrk = IIf(Check1.Value = vbChecked, True, False)
End Sub
Private Sub Command1_Click()
bWrk = True
Dim i As Long
Do While i < 99999999
If bWrk Then
Me.Caption = i
End If
Arr(i) = i
i = i + 1
DoEvents
Loop
End Sub
alibek писал(а):И ты не подумал, куда делись остальные 800Мб?
iGrok писал(а):Видимо, дело в GDI...
jangle писал(а):iGrok писал(а):Видимо, дело в GDI...
Можно писать баг-репорт в Майкрософт?
Option Explicit
Dim Arr(0 To 99999999) As Long
Private Sub Command1_Click()
Dim t0 As Single
Dim i As Long
Do While i < 99999999
If Timer > t0 + 0.1 Then
Me.Caption = i
t0 = Timer
End If
Arr(i) = i
i = i + 1
DoEvents
Loop
End Sub
Сейчас этот форум просматривают: SemrushBot и гости: 87